作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图弄清楚点击了哪个按钮,此代码在 IE 中运行良好,但如果我在 Chrome、Firefox 或 Safari 中运行,则它不会执行任何操作。在 firefox 中使用 firebug 时,我查看了表单详细信息,它显示 EVENTTARGET 没有任何值(value),它只是空白。如何让它在 FF、Chrome 和 Safari 上运行?
方法:
Control postbackControlInstance = null;
string postbackControlName = page.Request.Params.Get("__EVENTTARGET");
if (postbackControlName != null && postbackControlName != string.Empty)
{
postbackControlInstance = page.FindControl(postbackControlName);
}
else
{
for (int i = 0; i < page.Request.Form.Keys.Count; i++)
{
postbackControlInstance = page.FindControl(page.Request.Form.Keys[i]);
if (postbackControlInstance is System.Web.UI.WebControls.Button)
{
return postbackControlInstance;
}
}
}
if (postbackControlInstance == null)
{
for (int i = 0; i < page.Request.Form.Count; i++)
{
if ((page.Request.Form.Keys[i].EndsWith(".x")) || (page.Request.Form.Keys[i].EndsWith(".y")))
{
postbackControlInstance = page.FindControl(page.Request.Form.Keys[i].Substring(0, page.Request.Form.Keys[i].Length - 2));
return postbackControlInstance;
}
}
}
return postbackControlInstance;
代码调用方式:
if (Page.IsPostBack)
{
try
{
Control cause = GetPostBackControl(Page);
string statecause = cause.ID;
if (statecause == "buttonName1")
{
search(statecause);
}
else if (statecause == "buttonNAME2")
{
resetfields();
}
}
catch { }
}
最佳答案
最好的方法是确定导致回发的控件覆盖protected
。 Page.RaisePostBackEvent
方法。 ASP.NET 基础结构使用此方法通知导致回发的服务器控件它应该处理传入的回发事件:
public class MyPage : Page
{
protected override void RaisePostBackEvent(
IPostBackEventHandler sourceControl,
string eventArgument
)
{
// here is the control that caused the postback
var postBackControl = sourceControl;
base.RaisePostBackEvent(sourceControl, eventArgument);
}
}
您提供的代码应该适用于客户端 __doPostBack
时的场景。功能仅呈现到页面(例如,如果您使用唯一的一个按钮,如 <asp:Button runat="server" ID="btnSubmit" Text="submit" UseSubmitBehavior="true" />
,它将不会被呈现)。
如果即使在__doPostBack
的情况下功能已呈现,但 __EVENTTARGET
参数为空表示 __doPostBack
的默认行为在大多数情况下,自定义/不兼容的 javascript 代码违反了该功能。在这种情况下,即使 ASP.NET 基础结构也无法正确处理回发事件。
关于c# - EVENTTARGET 确定发件人时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5704500/
我是一名优秀的程序员,十分优秀!