포스트 백에서 Page_Init 이벤트에서 어떤 컨트롤이 포스트 백을 유발하는지 어떻게 확인할 수 있습니까?
포스트 백에서 Page_Init 이벤트에서 어떤 컨트롤이 포스트 백을 유발하는지 어떻게 확인할 수 있습니까?
protected void Page_Init(object sender, EventArgs e)
{
//need to check here which control cause postback?
}
감사
포스트 백 제어권을 얻는 방법에 대한 몇 가지 훌륭한 조언과 방법이 이미 있다는 것을 알았습니다. 그러나 포스트 백 컨트롤 ID를 검색하는 방법이있는 다른 웹 페이지 ( Mahesh blog )를 찾았 습니다.
확장 클래스로 만드는 것을 포함하여 약간 수정하여 여기에 게시하겠습니다. 그런 식으로 더 유용하기를 바랍니다.
/// <summary>
/// Gets the ID of the post back control.
///
/// See: http://geekswithblogs.net/mahesh/archive/2006/06/27/83264.aspx
/// </summary>
/// <param name = "page">The page.</param>
/// <returns></returns>
public static string GetPostBackControlId(this Page page)
{
if (!page.IsPostBack)
return string.Empty;
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 controlName = page.Request.Params["__EVENTTARGET"];
if (!String.IsNullOrEmpty(controlName))
{
control = page.FindControl(controlName);
}
else
{
// if __EVENTTARGET is null, the control is a button type and we need to
// iterate over the form collection to find it
// ReSharper disable TooWideLocalVariableScope
string controlId;
Control foundControl;
// ReSharper restore TooWideLocalVariableScope
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"))
{
controlId = ctl.Substring(0, ctl.Length - 2);
foundControl = page.FindControl(controlId);
}
else
{
foundControl = page.FindControl(ctl);
}
if (!(foundControl is IButtonControl)) continue;
control = foundControl;
break;
}
}
return control == null ? String.Empty : control.ID;
}
업데이트 (2016-07-22) : 타사 컨트롤의 포스트 백이 인식 될 수 있도록 유형 검사 Button
및 ImageButton
찾도록 변경되었습니다 IButtonControl
.
다음은 당신을 위해 트릭을 수행 할 수있는 몇 가지 코드입니다 ( Ryan Farley의 블로그 에서 가져옴 ).
public static Control GetPostBackControl(Page page)
{
Control control = null;
string ctrlname = page.Request.Params.Get("__EVENTTARGET");
if (ctrlname != null && ctrlname != string.Empty)
{
control = page.FindControl(ctrlname);
}
else
{
foreach (string ctl in page.Request.Form)
{
Control c = page.FindControl(ctl);
if (c is System.Web.UI.WebControls.Button)
{
control = c;
break;
}
}
}
return control;
}
양식 매개 변수에서 직접 또는
string controlName = this.Request.Params.Get("__EVENTTARGET");
Edit: To check if a control caused a postback (manually):
// input Image with name="imageName"
if (this.Request["imageName"+".x"] != null) ...;//caused postBack
// Other input with name="name"
if (this.Request["name"] != null) ...;//caused postBack
You could also iterate through all the controls and check if one of them caused a postBack using the above code.
If you need to check which control caused the postback, then you could just directly compare ["__EVENTTARGET"]
to the control you are interested in:
if (specialControl.UniqueID == Page.Request.Params["__EVENTTARGET"])
{
/*do special stuff*/
}
This assumes you're just going to be comparing the result from any GetPostBackControl(...)
extension method anyway. It may not handle EVERY situation, but if it works it is simpler. Plus, you won't scour the page looking for a control you didn't care about to begin with.
if (Request.Params["__EVENTTARGET"] != null)
{
if (Request.Params["__EVENTTARGET"].ToString().Contains("myControlID"))
{
DoWhateverYouWant();
}
}
Assuming it's a server control, you can use Request["ButtonName"]
To see if a specific button was clicked: if (Request["ButtonName"] != null)
An addition to previous answers, to use Request.Params["__EVENTTARGET"]
you have to set the option:
buttonName.UseSubmitBehavior = false;
To get exact name of control, use:
string controlName = Page.FindControl(Page.Request.Params["__EVENTTARGET"]).ID;
'programing tip' 카테고리의 다른 글
순수한 CSS 3 차원 구체를 어떻게 만들 수 있습니까? (0) | 2020.12.03 |
---|---|
여러 병을 결합하는 깨끗한 방법? (0) | 2020.12.03 |
Linq는 각 그룹별로, 그룹별로 정렬합니까? (0) | 2020.12.03 |
Eclipse 프로그램에서 Java 키워드 어설 션을 활성화하는 방법은 무엇입니까? (0) | 2020.12.03 |
XML 헤더가 포함 된 경우 C # XmlDocument.LoadXml (string)이 실패하는 이유는 무엇입니까? (0) | 2020.12.03 |