Get control name in Page_Load event which make the post back
来源:互联网 发布:js 对象遍历 编辑:程序博客网 时间:2024/05/07 00:12
Hi,
Few day back i need post back control name in the Page_Load event. I did lots of search on net. I found few intersting fact about that and i am sharing that.
There are two types of controls which make post back in ASP.NET. One button type control like image button, button (whose type is “submit”), and another type use javascript function “_doPostBack” for the post back.
If post back control is button type then it will be added in the Request.Form collection means if there are two button in a page named button1 and button2 and if button1 make post back then only button1 will be in Request.Form Collection not button2 (but Request.Form collection can contains other server controls also like if page contains few textbox, dropdown list etc.) and if post back made by the button2 then only button2 will be available in Request.Form collection not button1(with other server control as I discuss earlier).
So if you want to catch which button type control made a post back in page load event, you have to just iterate the Request.Form collection.
I’ll show you demo latter in this article.
Another category of server control who make post back use the client side javascript function _doPostBack like if we made autopostback true for dropdown list, radio button etc.
If you look view source you will found _doPostBack javascript function.
function __doPostBack(eventTarget, eventArgument)
{
if (!theForm.onsubmit || (theForm.onsubmit() ! = false ))
{
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument; theForm.submit();
}
}
As you can see this function take two arguments “eventTarget” and “eventArgument”. “eventTarget” used for the control ID who is responsible for the postback and “eventArgument” used for the additional information about the control.
If you look at the view source you will also found these two hidden fields.
<input type= "hidden" name= "__EVENTTARGET" id= "__EVENTTARGET" value= "" />
<input type= "hidden" name= "__EVENTARGUMENT" id= "__EVENTARGUMENT" value= "" />
Lets add one dropdown server control in page and make autopostback true also add some dummy data. If you look at the view source you will found
<select name="DropDownList1" onchange="javascript:setTimeout('__doPostBack(/'DropDownList1/',/'/')', 0)" id="DropDownList1">
<option value="1">abc</option>
<option value="2">xyz</option>
</select>
ASP.NET engine automatically add onchange event and call the _doPostBack function and pass the appropriate parameter.
_doPostBack function first set the value of those hidden field and then submit the form. So if you want to know whether this dropdown list make post back or not you have to just check the value of “__EVENTTARGET” hidden field from the form parameter collection. I’ll show you code as well.
In my example I am adding two buttons, one image button, one dropdown list, one checkbox and two image buttons. I’ll try to print the control name which makes the post back. All I’ll try to find in page load event. So be ready for the ride.
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
Response.Write(getPostBackControlName());
}
private string getPostBackControlName()
{
Control control = null;
//first we will check the "__EVENTTARGET" because if post back made by the controls
//which used "_doPostBack" function also available in Request.Form collection.
string ctrlname = Page.Request.Params["__EVENTTARGET"];
if (ctrlname != null && ctrlname != String.Empty)
{
control = Page.FindControl(ctrlname);
}
// if __EVENTTARGET is null, the control is a button type and we need to
// iterate over the form collection to find it
else
{
string ctrlStr = String.Empty;
Control c = null;
foreach (string ctl in Page.Request.Form)
{
//handle ImageButton they having an additional "quasi-property" in their Id which identifies
//mouse x and y coordinates
if (ctl.EndsWith(".x") || ctl.EndsWith(".y"))
{
ctrlStr = ctl.Substring(0, ctl.Length - 2);
c = Page.FindControl(ctrlStr);
}
else
{
c = Page.FindControl(ctl);
}
if (c is System.Web.UI.WebControls.Button ||
c is System.Web.UI.WebControls.ImageButton)
{
control = c;
break;
}
}
}
return control.ID;
}
}
I Hope that will help you out in some situation. If you have any issue you can post in this blog or mail me at singh.mahesh@gmail.com
Thanks
原文地址:http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx
- Get control name in Page_Load event which make the post back
- Get control name in Page_Load event which make the post back
- The Calendar Control and the DayRender Event in ASP.Net
- how to get the function back trace in php
- Listening for the link event in a Flex Label control
- In RadGrid, How to get the control inside usercontrol
- Get Local IP Address and Set in the IP Control
- Get Minutes for Match Event Back!!!
- Get the page name in asp.net web page
- The days never get back
- cannot match operand(s) in the condition to the corresponding edges in the enclosing event control o
- Android make: How to control which module is built
- Get/Post in http
- In which of the following does a C++ developer use the placement new syntax to make new allocate an
- The run order about Loaded event and OnApplyTemplate in custom control of Silverlight 2 beta 2
- back in the saddle again
- event.which
- get back onto the domain issue
- 了解NoSQL的必读资料
- 营销圣训
- 希腊字母的正确读法是什么?
- Kernel-based Virtual Machine (KVM) 基本操作备忘
- 我很帅
- Get control name in Page_Load event which make the post back
- 脑子生锈了
- 视频监控中人脸识别转让
- 如何导出sql2005的数据库才能够导入到Sql2000|sqlserver数据库迁移
- 网游创业失败全攻略
- 访问修饰符
- VC++6.0 快捷键清单
- sql 2005 导入到 sql 2000的步骤
- C++类型转换基本概念浅谈