5

我有两个按钮,它们都在 asp.net 中提交表单。

我需要在下面的函数中知道..单击了什么按钮..登录或注册按钮。通过这些信息,我想触发加载事件中的功能之一。

    protected void Page_Load(object sender, EventArgs e)
{
    AddCountries();
    AddAge();

      if (IsPostBack)
      {
          string pwd = LoginPassword.Text;
          string saltAsBase64 = "z3llWdYSA2DY3M4uNSpOQw==";
          string hash = HashPass.GenerateHash(pwd, saltAsBase64);

          if (Page.IsValid)
          {
              LoginUser(hash);
         /// Depending on what the user pressed..I need to trigger the function 
        // above or below
              RegisterUser(hash);
          }



      }
}

如果我在按钮事件中有这个怎么办:

FormsAuthentication.RedirectFromLoginPage(currentUser.UserName, false);

重定向会在按钮事件之后立即发生吗?还是会再次触发页面加载事件,忽略该重定向?

4

1 回答 1

5

如果按钮是服务器端控件<asp:button/>,那么您可以处理(特定)按钮的事件:

protected void Button1_Click(object sender, EventArgs e) {....}

对比

protected void Button2_Click(object sender, EventArgs e) {......}

见后 提出哪些Page_LoadASP.Net Page Life Cycle

如果您使用标准 HTML<input type=submit />并回发到同一页面,则可以检查Request.Form集合(您也可以使用服务器端控件进行操作)。

更新:

  • Page_Load总是回发时提出
  • 客户端验证将阻止回发
  • 如果您正在使用服务器验证控件,请Page.IsValid在执行某些操作之前检查处理程序
  • 根据您的需要,您还可以检查控件/值Page_Load(检查Page.IsPostBack- 关键是您有选择...

因此,如果您(相反)想要检查Page_Load

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        if ((UserEmail.Text == "jchen@contoso.com") &&
         (UserPass.Text == "37Yj*99Ps"))
          {
            FormsAuthentication.RedirectFromLoginPage
               (UserEmail.Text, Persist.Checked);
          }
        else
          {
            ......
          }
    }
}

以上代码取自MSDN并稍作修改

更新2:

如果您正在使用服务器验证控件,请不要使用Page_Load. 使用按钮处理程序并检查Page.IsValid.

于 2012-04-28T16:10:48.743 回答