使用运行时创建的链接来触发ASP.Net中隐藏按钮的单击处理程序
Using runtime created links to trigger the click handler of a hidden button in ASP.Net
我正在努力加快asp页面的加载时间。一个小型ui组件使用的方法大约占用80%的加载时间,因此我将其委托给一个单独的线程,该线程每秒都会被ajax调用查询,以便在组件准备就绪时显示该组件,同时保持页面其余部分的功能。
一旦后台线程完成,就会创建组件作为ajax调用的一部分。该组件是一个可折叠的链接列表,每个链接都需要执行回发才能加载新页面。由于这些链接是在页面加载后创建的,我不能简单地为每个链接的点击事件分配事件处理程序,因此我创建了一个隐藏按钮(behindTargetLinkButton),并为其分配了点击处理程序,以便隐藏按钮的href看起来像这样;
javascript:__doPostBack('moduleHome$Home$behindTargetLinkButton','')
然后,我将每个链接的href设置为以下内容,其中args是一个字符串,包含每个链接唯一的信息。
javascript:__doPostBack('moduleHome$Home$behindTargetLinkButton','" + args + "')
当我调试服务器端并在处理程序方法中放置断点时,我会在直接单击隐藏按钮时命中它(使其在测试时可见),但在单击其中一个链接时不会命中它,即使两个href相同。在调试客户端时,他们都正确地命中了__doPostBack函数,并且都使用相同的eventTarget正确地提交了表单,所以我不明白为什么隐藏按钮正确地发布回了服务器,但单个链接却没有。我也尝试过在不回复与后者的任何争论的情况下这样做,使得href完全相同,但这没有什么区别。有人能解释一下为什么会发生这种情况,也许能为这个问题提供一个解决方案吗?
ajax调用返回一个字符串,其中包含要放置在现有占位符div("toggle")中的组件的html。
StringWriter sw = new StringWriter();
HtmlTextWriter h = new HtmlTextWriter(sw);
toggle.RenderControl(h);
string str = sw.GetStringBuilder().ToString();
使用以下内容创建各个链接,并将其添加到foreach循环中的togglediv中;
HtmlGenericControl li = new HtmlGenericControl("li");
LinkButton a = new LinkButton();
a.Attributes["href"] = "javascript:__doPostBack('moduleHome$Home$behindTargetLinkButton','" + args + "')";
li.Controls.Add(a);
隐藏按钮是在html中的aspx页面中创建的;
<asp:LinkButton ID="behindTargetLinkButton" runat="server" Style="display: none;" />
然后点击处理程序被添加到我代码后面的OnInit方法中。
behindTargetLinkButton.Attributes["link"] = "behindTarget_Edit";
behindTargetLinkButton.Click += new EventHandler(notification_Click);
点击处理程序用于页面上的所有按钮,并在链接属性上有一个switch语句来决定运行哪个代码;
protected void notification_Click(object source, EventArgs e)
{
LinkButton a = (LinkButton)source;
ModuleAction act;
switch (a.Attributes["link"].ToString())
{
case "behindTarget_Edit":
// Code to create an action to take you to the relevant page
break;
}
}
谢谢。
您已经放置了很多信息,但缺少一个:aspx.cs
后端的骨架。
尽管如此,我还是想到了一件事。您没有将动态链接按钮附加到EventHandler
。
foreach (Control ctrl in plhDynamicLinks.Controls)
{
LinkButton dynamicButton = (LinkButton)ctrl;
dynamicButton.Click += new EventHandler(LinkButton_Click);
}
试试这个,请提供更多信息:)
更多信息:LINK1,LINK2
- 如何使用javascript将值引导下拉列表设置为隐藏值asp.net
- ASP.net Javascript函数中的隐藏字段为null
- 使用C#将在JavaScript中创建的变量值传递给ASP.Net中的服务器端(代码隐藏)
- 在代码隐藏 (asp.net VB) 中返回“完整”客户端 ID
- 从 asp.net 代码隐藏中触发JavaScript函数
- 如何部分隐藏asp.net复选框列表项
- Jquery使用asp.net回发隐藏
- ASP.NET控件代码隐藏未执行
- 使用运行时创建的链接来触发ASP.Net中隐藏按钮的单击处理程序
- 使用jquery在asp.net表单视图中隐藏按钮
- 在asp.net的UpdatePanel中隐藏/显示表
- 如何在asp.net的代码隐藏文件中显示对话框
- 使用ShowModalDialog传递值,使用asp.net代码隐藏中的查询字符串
- 从 ASP.NET 代码隐藏中获取 EverCookie 值
- 有没有办法使用 Javascript 将 ASP.Net 隐藏字段值设置为 NULL
- Javascript从 ASP.net 代码隐藏中触发,在Chrome中运行,但在IE9中不运行
- 如何在没有代码隐藏访问权限的情况下将自定义 HTML 属性添加到 ASP.NET 标签
- 通过CSS和JavaScript隐藏和显示 asp.net 单选按钮
- 为什么我不能在 Javascript 中或从代码隐藏中将焦点设置为 ASP.Net TextBox 控件
- jQuery 获取 ASP.net 隐藏文本框值的值