如何将Button Click事件中的值传递给Page_Load

时间:2014-07-30 18:54:10

标签: c# asp.net

我似乎正在努力处理页面生命周期的顺序。根据用户选择按钮1或2,我需要在Page_Load事件期间动态添加各自的控件。我的问题是,在单击按钮时,在读取Button_Click事件代码之前执行Page_Load事件。那里有我的变量" doWhat"在Page_Load事件之后才分配值。我怎样才能拥有" doWhat"变量分配了一个值,以便在Page_Load?

期间读取

下面是两个按钮的asp.net表单代码:

<form id="form1" runat="server">
<div>
    <asp:Button ID="Button1" runat="server" Text="Button 1" onclick="Button_Click" />
    <asp:Button ID="Button2" runat="server" Text="Button 2" onclick="Button_Click" />
    <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
</div>
</form>

以下是背后的代码:

 int doWhat;

protected void Page_Load(object sender, EventArgs e)
{
   doWhat = Convert.ToUInt16(ViewState["doWhat"]);

    if (doWhat == 1)
    {
        // code to dynamically load group 1 controls
    }
    else 
    {
        // code to dynamically load group 2 controls
    }
    Label1.Text = Convert.ToString(doWhat);
}

protected void Button_Click(object sender, EventArgs e)
{
    Button btn = sender as Button;
    if (btn.ID == "Button1")
    {
        doWhat = 1;
    }
    else
    {
        doWhat = 2;
    }
    ViewState.Add("doWhat", doWhat);  
}

3 个答案:

答案 0 :(得分:1)

如果您对javascript感到满意,那么您可以通过对设计和代码进行以下更改来实现。在aspx页面中添加隐藏字段。您的HTML代码应该是这样的。     

    <form id="form1" runat="server">
        <div>
            <asp:Button ID="Button1" runat="server" Text="Button 1" OnClick="Button_Click" OnClientClick="return doWhatAction(1);" />
            <asp:Button ID="Button2" runat="server" Text="Button 2" OnClick="Button_Click" OnClientClick="return doWhatAction(2);" />
            <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
            <asp:HiddenField ID="HiddenField1" Value="1" runat="server" />
            <script type="text/javascript">
                var doWhatAction = function (actionIndex) {
                    //alert(actionIndex);
                    document.getElementById("<%=HiddenField1.ClientID%>").value = actionIndex;
                    return true;
                }
            </script>
        </div>
    </form>
    

你的代码就像......

    int doWhat;
    protected void Page_Load(object sender, EventArgs e)
    {
        //doWhat = Convert.ToUInt16(ViewState["doWhat"]);
        doWhat = Convert.ToUInt16(HiddenField1.Value);

        if (doWhat == 1)
        {
            // code to dynamically load group 1 controls
        }
        else
        {
            // code to dynamically load group 2 controls
        }
        Label1.Text = Convert.ToString(doWhat);
    }

    protected void Button_Click(object sender, EventArgs e)
    {
        //Do Nothing

        //Button btn = sender as Button;
        //if (btn.ID == "Button1")
        //{
        //    doWhat = 1;
        //}
        //else
        //{
        //    doWhat = 2;
        //}
        //ViewState.Add("doWhat", doWhat); 
    }

答案 1 :(得分:0)

在这种情况下你可以使用jquery或javascript。

  1. 接受表格中的隐藏变量

  2. 在javascript

  3. 按钮的点击事件中初始化它
  4. 在页面加载中读取隐藏变量的值

  5. <head >
        <title>Hidden Variable</title>
         <script type="text/javascript">
             function SetHDNValue()
             {
                var hdnControlID = '<%= hdnControl.ClientID %>';
                document.getElementById(hdnControlID).value=1;
             }
        </script>
    </head>
    
    
    
    <body >
        <form id="form1" runat="server">
        <div>  
            <input id="hdnControl" type="hidden" runat="server" />  
    
            <asp:Button ID="btnJSValue" Text="Click" runat="server" OnClientClick="SetHDNValue()" 
    />
        </div>
    
        </form>
    </body>
    

    在文件hdnControl.value

    后面的代码中

答案 2 :(得分:0)

很久以前我没有使用asp.net表单。并忘了做事。但我发现你可以做到。就像stackoverflow链接一样,答案是错误的。我从链接中复制了主要语句,这些语句指示了回发事件的工作方式以及如何将其用于您的目的。更多http://aspsnippets.com/Articles/How-to-find-the-control-that-caused-PostBack-in-ASP.Net.aspx

所有控件都接受Button和ImageButton使用JavaScript来进行回发。 要在这些控件上启用回发,必须将AutoPostBack属性设置为true

当您将此属性设置为true时,会在事件上调用__doPostBack函数,从而导致回发。

在您为上述任何控件设置LinkBut​​ton或将 AutoPostBack设置为true 之前,__doPostBack功能在页面源中不可见。

以下是 __ doPostBack 的生成方式:

<script type = "text/javascript">
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
    theForm.__EVENTTARGET.value = eventTarget;
    theForm.__EVENTARGUMENT.value = eventArgument;
    theForm.submit();
}
}
</script> 

__doPostBack函数只将以下两个参数存储在两个隐藏字段中

  1. eventTarget - 导致回发的控件的名称
  2. eventArgument - 要发送给服务器的参数。
  3. 在两个隐藏字段中,仅当AutoPostBack设置为true时才会出现

    最后,通过获取导致回发的控件的ID ,您可以通过以下方式进行区分:

    if (IsPostBack)
    {
        string CtrlID = string.Empty;
        if (Request.Form["__EVENTTARGET"] != null &&
            Request.Form["__EVENTTARGET"] != string.Empty)
        {
            CtrlID = Request.Form["__EVENTTARGET"];
    
            /****implement Your logic depending on control ID****/
        }
    
    }