通过单击DIV执行服务器端方法

本文关键字:服务器端 方法 执行 DIV 单击 | 更新日期: 2023-09-27 17:49:51

我正在做一个ASP。Net项目,使用 c# .

通常,当我需要把按钮,将执行一些方法,我将使用ASP控制器(按钮)内的runat="server"表单。

但是我觉得这确实限制了我网站的功能,因为当我使用JSP时,我使用jquery来达到servlet来执行一些代码并返回responseText

我还没有检查这是如何在ASP中完成的。但是我的问题涉及控制器和著名的runat="server"

当我添加runat="server"到任何HTML元素时,我应该能够在c#(服务器端)中操纵这个HTML元素,这实际上是有效的,我可以改变ID,设置InnerTextInnerHtml,但是我不能得到的东西,是为什么我不能通过点击这个元素来执行一个方法?

的"onclick"属性是JavaScript我认为,和OnServerClick似乎不工作为好。是我的密码有问题吗?或者这根本不起作用?

通过单击DIV执行服务器端方法

您必须使用Jquery和呼叫来处理div中的点击通过JQuery

有几种方法可以通过单击页面上的div或任何东西来执行服务器端方法。第一个是__dopostback,第二个是在javascript或jQuery中处理点击,并调用处理程序中的函数或webservice中的页面方法或页面代码中的页面方法。下面是处理程序版本:

 $("#btn1").click(function() {
    $.ajax({
            url: '/Handler1.ashx?param1=someparam',
            success: function(msg, status, xhr) {
                //doSomething, manipulate your html
            },
            error: function() {  
             //doSomething
            }
        });
 });

我认为第二个版本更好,因为你可以在没有任何更新面板的情况下异步地进行部分回发。缺点是,服务器端代码与页面后台代码是分开的。

处理程序:

public class Handler1: IHttpHandler
{
   public void ProcessRequest(HttpContext context)
   {
      context.Response.ContentType = "application/json";
      var param1= context.Request.QueryString["param1"];
      //param1 value will be "someparam"
      // do something cool like filling a datatable serialize it with newtonsoft jsonconvert
      var dt= new DataTable();
      // fill it
      context.Response.Write(JsonConvert.SerializeObject(dt));
   }
}

如果一切正常,您将在成功部分的ajax调用中获得响应,并且名为"msg"的参数将是您序列化的JSON数据表。

你可以使用__doPostBack javascript函数从jquery中执行一个方法,在服务器中使用__doPostBack()

将此代码添加到您的jquery上的div onclick并传递调用click的div id

__doPostBack('__Page', DivID);

在页面加载时添加以下代码

if (IsPostBack)
            {
    //you will get id of div which called function
    string eventargs = Request["__EVENTARGUMENT"];
                    if (!string.IsNullOrEmpty(eventargs))
                    {
                       //call your function 
                    }
}

让div runat="server" and id="divName"

in page_Load事件:

if (IsPostBack)
{
if (Request["__EVENTARGUMENT"] != null && Request["__EVENTARGUMENT"] == "divClick")
{
    //code to run in click event of divName
}
}
divName.Attributes.Add("ondivClick", ClientScript.GetPostBackEventReference(divName, "divClick"));

希望有帮助

如果你指的是divs与runat="server"属性,他们没有onserverclick事件,这就是为什么它不工作