获取引发PostBack的对象
既然asp.net能把客户端的操作包装事件, PostBack之后从Page.Request.Forms里肯定能找到到底是哪个控件的提交.
看了一下asp.net生成的html, 我发现对客户端来说, 引发postback的方法有两种, 一种是submit按钮, 一种是调用__doPostBack()
例如Button的html代码是
<input type="submit" name="Button1" value="提交" id="Button1" />
而LinkButton是
<a id="LinkButton1" href="javascript:__doPostBack('LinkButton1','')">LinkButton</a>
对于在客户端调用__doPostBack的控件来说, 从
function __doPostBack(eventTarget, eventArgument) {
var theform;
if (window.navigator.appName.toLowerCase().indexOf("netscape") > -1) {
theform = document.forms["Form1"];
}
else {
theform = document.Form1;
}
theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
theform.__EVENTARGUMENT.value = eventArgument;
theform.submit();
}
可以看到控件名被保存在.__EVENTTARGET的hidden里. 可以通过Page.Request.Form["__EVENTTARGET"]得到控件的ClientID
而对于submit, 就要在VS.NET里用调试窗口一个个查看Request.Forms的变量值了. 原来他的ClientID是Page.Request.Form的最后一个Key, 可以通过Page.Request.Form.AllKeys[Page.Request.Form.AllKeys.Length - 1]得到
如果还要得到这个控件的引用, 调用FindControl方法就可以了.
好了,就这样拿到了引发PostBack的对象了, 但是, 用来干啥好呢? 暂时想不到, 只是一时好奇想到这个问题....郁闷