0

我正在使用C#开发一个ASP.Net项目。

通常,当我需要放置将执行某些方法的按钮时,我会在runat="server"表单中使用 ASP 控制器(按钮) 。

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

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

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

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

4

6 回答 6

2

您将不得不通过div使用Jquery 和调用服务器端方法来处理点击JQuery

于 2012-12-28T12:01:02.270 回答
1

您可以使用 __doPostBack javascript 函数从 jquery 单击服务器中执行方法,有关更多详细信息,请参阅此威胁如何使用 __doPostBack()

于 2012-12-28T12:04:17.043 回答
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 数据表。

于 2012-12-28T12:17:24.480 回答
1

在 div onclick 上的 jquery 中添加此代码并传递 DIv id whcih call click

__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 
                    }
}
于 2012-12-28T12:20:39.717 回答
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"));

希望能帮助到你 :)

于 2012-12-28T12:37:24.850 回答
-1

如果您指的是具有 runat="server" 属性的 div,它们没有 onserverclick 事件,这就是它不起作用的原因

于 2012-12-28T12:01:37.747 回答