如何检查在页面的Page_Load
中单击了哪个LinkButton
。 这是为了避免调用服务,以便它只执行其事件中存在的内容。如何验证在Page_Load上在asp.net中单击哪个LinkButton
回答
您的意思是说,您只是试图在页面上的其他回发事件触发时保持Page_Load代码不被执行?如果是这样的话,把它包装:
if (!IsPostBack)
(恕我直言,这是一个有点被WebForms的事件模型必要一个黑客,但它是什么。)
还是我误解你的问题?
至于用于识别特定的LinkButton,你可以使用的CommandName参数:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.linkbutton.commandname.aspx
我以前要做到这一点,因为在事件处理已经来不及了。你可以使用javascript来编写被点击到隐藏字段的按钮的ID。比你可以在Page_Load中检索它。如果我没有记错,其他方法是查看_EVENTTARGET隐藏字段,这是一段时间。
你也可以声明一个LinkButton类型的变量(或者Control或者其他),并且让按钮在click事件中通过引用来更新它们,然后检查Load的值。
您的Page_Load
应该运行的唯一一件事是您希望始终发出每一个请求的代码,或者让您只需运行一次即可在运行后检查中运行的代码。例如:
protected void Page_Load(object sender, EventArgs e)
{
// Put the all code you need to run with EVERY request here
// Then add a post back check for any code you want to ONLY run on the very
// first request to the page.
if (!IsPostBack)
{
// Code you only want to run the first time. Usually setup code to initalize
// DropDownLists, Grids or pre populate a form, etc...
}
}
你LinkButton
代码应该都在它自己的点击处理程序:
protected void yourLinkButton_Click(object sender, EventArgs e)
{
// code you want to execute when your button is clicked. This will run AFTER
// the Page_Load has finished.
}
现在,如果你LinkButton
在GridView
,Repeater
或某些类型的控制使用的需要结合要填写它,那么您可能需要实现一个RowCommand
事件处理函数来确定哪个LinkButton
被按下。您还可以将数据绑定到它的CommandArgument
属性,以将一些唯一的行特定数据传递给偶数处理程序。
如果你有一堆LinkButton
都使用完全相同的处理程序,最坏的情况是投下sender
,然后比较ID
值。
protected void yourLinkButton_Click(object sender, EventArgs e)
{
LinkButton btn = (LinkButton)(sender);
if (btn.ID.Equals("Some control name you want to compare"))
{
// do something
}
}
如果我在你的问题上的标记,只是留下评论,我会尝试和整理出来。
编辑:基于您的评论听起来好像你必须知道它是在Page_Load
由于一些其他方面的限制,其Button
。那么在Page_Load
没有干净的方式,但它可以完成。您需要检查密钥Request.Form
并检查特定的按钮名称(只有被点击的Button
应包含在密钥中)。例如:
if (Request.Form.AllKeys.Contains("yourButton1"))
{
// then do something based on yourButton1
}
else if (Request.Form.AllKeys.Contains("yourButton2"))
{
// then do something based on yourButton2
}
// etc...
我不认为这是任何其他干净的方式来解决它。如果该框架包含导致在sender
属性之一中回发的控件,那本来就不错。
另一个编辑:这完全滑了我的脑海。上面的编辑是你需要为Button
做的,因为它没有填充__EVENTTARGET
。由于您使用的是LinkButton
您可以使用以下方法来得到什么控制引起后背部:
string controlNameThatCausedPostBack = Request.Form["__EVENTTARGET"];
我有一个LinkButton
测试这和它的工作如预期。
。希望最终解决您的问题:)
感谢Kelsey的详细回答。我会以相同的方式实现..问题是在我的页面我正在页面加载和检查一些隐藏字段值分页......我知道它非常糟糕的设计,但它已经实施,所以不能改变它 – batwadi 2010-08-24 17:53:38
@ prakash我已经更新了我的答案,希望包含一些应该让你启动并运行的代码。让我知道你是否需要更多的帮助。 – Kelsey 2010-08-24 18:24:22
感谢您给予您Kelsey的时间,但问题是LinkButton不会出现在请求参数中,因为我的知识只有按钮id进入请求参数。请咨询 – batwadi 2010-08-26 14:32:11
独立处理方法是去这里的方式,但你可以给每个按钮的唯一ItemCommand
财产,过滤那些是必要的。
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack && Request.Form["__EVENTTARGET"] == LinkButton1.UniqueID)
{
// LinkButton1 was clicked
}
}
- 1. 如何知道ListView中的哪个LinkButton被点击
- 2. LinkButton不会在点击()上调用
- 3. LinkButton点击OnPreRender
- 4. ASP.NET MVC中的LinkButton
- 5. ASP.NET LinkButton在iPad中不起作用
- 6. ASP.NET LinkButton - 如何隐藏javascript_doPostBack?
- 7. 如何将CSS应用于asp.net LinkButton?
- 8. 如何使用ASP.Net C#中的ModalPopupExtender在GridView中连接LinkButton?
- 9. 的OnClientClick确实在asp.net的LinkButton
- 10. 隐藏的LinkButton在asp.net GridView控件
- 11. 在DataList中隐藏LinkButton
- 12. ASP.Net LinkButton单击事件给出错误
- 13. 如何使用LinkButton在ASP.NET中关闭窗体?
- 14. 在IE9中点击一个带有JavaScript的LinkButton
- 15. 如何找到在JavaScript的LinkButton ID,
- 16. jQuery在LinkButton上调用__doPostBack
- 17. LinkButton上的动态文本框单击
- 18. 如何在点击LinkButton时更新PlaceHolder
- 19. 如何在10秒后启用LinkButton Asp.net?
- 20. 的LinkButton在ListView与CommandArgument
- 21. 的LinkButton在DataList控件
- 22. Gridview和LinkButton
- 23. C#目标=“_空白”在一个LinkButton
- 24. 如何在LinkButton点击事件上启动电子邮件客户端?
- 25. 通过一个LinkButton
- 26. 如何显示上LinkButton的图像看起来在asp.net吸引力
- 27. 如何更改C#中的LinkButton forecolor?
- 28. 我如何排序在一个ListView关于一个LinkButton
- 29. LinkButton的点击不更新面板
- 30. 我想禁用双击我的LinkButton
为什么它必须在page_load?为什么不为每个链接按钮设置不同的事件处理程序,并在该功能中进行处理? – Tommy 2010-08-23 20:23:24
页面加载执行与链接无关, – batwadi 2010-08-23 20:48:44
对不起,但您的需求听起来像是一个不良设计的解决方法。我会建议你阅读关于asp.net的概念。凯尔西的答案是一个好的开始。 – Scordo 2010-08-23 21:25:49