确定发送方的问题
本文关键字:问题 | 更新日期: 2023-09-27 17:50:23
我想弄清楚什么按钮被点击,这段代码在IE中工作得很好,但如果我Chrome, Firefox或Safari它不做任何事情。当在firefox中使用firebug时,我查看了Form Details,它显示EVENTTARGET没有值,只是空白。我怎么能得到这个工作在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基础结构将无法正确处理post - back事件。