Yok

苦海无涯,回头是岸啊

获取引发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的对象了, 但是, 用来干啥好呢? 暂时想不到, 只是一时好奇想到这个问题....郁闷

posted on 2005-01-19 20:44  Yok  阅读(2514)  评论(7编辑  收藏  举报

导航