现在的位置: 首页 > 综合 > 正文

获取引发PostBack的对象

2013年06月24日 ⁄ 综合 ⁄ 共 1007字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.