为了账号安全,请及时绑定邮箱和手机立即绑定

在回发时,如何检查Page_Init事件中哪个控件导致回发

/ 猿问

在回发时,如何检查Page_Init事件中哪个控件导致回发

C#
不负相思意 2019-12-25 10:35:56

在回发时,如何检查Page_Init事件中哪个控件导致回发。


protected void Page_Init(object sender, EventArgs e)

{

//need to check here which control cause postback?


}

谢谢


查看完整描述

3 回答

?
MMMHUHU

我看到已经有一些很好的建议和方法建议如何获得回发控制。但是,我发现了另一个网页(Mahesh博客),该网页具有一种检索回发控件ID的方法。


我将在此处进行一些修改,包括使其成为扩展类。希望它以这种方式更有用。


/// <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;

}

键入check for Button并ImageButton更改为寻找IButtonControl以识别来自第三方控件的回发。


查看完整回答
反对 回复 2019-12-25
?
明月笑刀无情

这是一些可能会帮助您解决问题的代码(摘自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;

}


查看完整回答
反对 回复 2019-12-25
?
幕布斯5086720

直接在表单参数中


string controlName = this.Request.Params.Get("__EVENTTARGET");

编辑:要检查控件是否引起回发(手动):


// 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

您还可以遍历所有控件,并使用上述代码检查其中一个控件是否引起了postBack。


查看完整回答
反对 回复 2019-12-25

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信