通过单击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,设置InnerText或InnerHtml,但是我不能得到的东西,是为什么我不能通过点击这个元素来执行一个方法?
的"onclick"属性是JavaScript我认为,和OnServerClick似乎不工作为好。是我的密码有问题吗?或者这根本不起作用?
您必须使用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事件,这就是为什么它不工作