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

时间:2012-12-28 11:58:27

标签: c# asp.net html

我正在使用 C#开展 ASP.Net 项目。

通常,当我需要按钮 执行某些方法时,我会在 runat =“server”中使用ASP Controller(Button) 表格。

但我觉得这确实限制了我网站的功能,因为当我以前使用 JSP 时,我使用 jquery 来访问 servlet < / strong>执行一些代码并返回 responseText

我没有检查ASP.Net是如何做到的,但我的问题涉及控制器和着名的 runat =“server”

当我向任何 HTML元素添加 runat =“server”时,我应该能够在C#(服务器端)中操作此HTML元素,这实际上有效,我可以更改 ID ,设置 InnerText InnerHtml ,但是我无法获得的是, 为什么我不能通过单击此元素来执行方法?

我认为“ onclick ”属性适用于JavaScript,而 OnServerClick 似乎也不起作用。我的代码有问题吗?或者这根本不起作用?

6 个答案:

答案 0 :(得分:2)

您必须使用div处理Jquery中的点击并致电 通过JQuery

的服务器端方法

答案 1 :(得分:1)

您可以使用__doPostBack javascript函数从服务器中的jquery click执行一个方法,查看此威胁以获取更多详细信息How to use __doPostBack()

答案 2 :(得分:1)

通过单击页面上的div或任何内容,有多种方法可以执行服务器端方法。第一个是__dopostback,第二个是处理javascript或jQuery中的单击,并在处理程序中调用函数或在Web服务中调用页面方法或在页面代码后面调用页面方法。 这是处理程序版本:

 $("#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数据表。

答案 3 :(得分:1)

在div onclick上的jquery中添加此代码,并传递调用点击

的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 
                    }
}

答案 4 :(得分:1)

使div runat =“server”和id =“divName”

在cs中的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"));

希望有所帮助:)

答案 5 :(得分:-1)

如果您指的是具有runat =“server”属性的div,则它们没有onserverclick事件,这就是为什么它不起作用