时间:2015-04-26 13:22:33

标签: jquery asp.net

我有一个简单的模式,它由标准的ASP.NET需要的字段验证器组成,它们在提交表单时负责最终用户不需要提供必要字段。

这一切都很好,很好。但是,我对username字段进行了一些进一步的验证,该字段使用ASP.NET Identity来验证用户名是否有效。当用户名无效时,我使用与之前相同的错误验证器,但是一旦ASP.NET处理完该方法,模态就会自动关闭,用户不会看到该消息,直到再次启动模式。 / p>

如何保持模态对话框的关闭,直到我很乐意这样做?

下面的模式和代码背后的代码:

<div class="modal fade" id="modalLostPassword" tabindex="-1" role="dialog" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        <h4 class="modal-title">Password recovery</h4>
      </div>
      <div class="modal-body row-fluid">
        <div class="panel-heading panel-default">
          <div class="alert alert-info alert-white rounded">

            <div class="icon"><i class="fa fa-info-circle"></i>
            </div>
            <p>Please complete the below fields, and click submit. We will email you a temporary password.</p>
          </div>
          <%-- <div class="bs-callout bs-callout-info">
            <div id="completeTxtWarning" class="alert alert-danger">Please</div>
        </div>--%>
        <asp:PlaceHolder runat="server" ID="ResetPasswordErrorMessage" Visible="false">
          <p class="text-danger">
            <asp:Literal runat="server" ID="ResetPasswordFailureText" />
          </p>
        </asp:PlaceHolder>

      </div>
      <div id="pnlLostPassword" class="container-fluid panel-danger">
        <div>

          <div class="form-group">
            <div class="col-sm-12">
              <div class="input-group">
                <span class="input-group-addon"><i class="fa fa-user"></i></span>
                <asp:TextBox runat="server" ID="confirmUserName" CssClass="form-control" placeholder="Username.." />
              </div>
              <asp:RequiredFieldValidator runat="server" ID="RequiredFieldValidator1" ValidationGroup="ResetPasswordValidationGroup" ControlToValidate="confirmUserName" CssClass="text-danger" ErrorMessage="The user name field is required." />
            </div>
          </div>
          <div class="form-group">
            <div class="col-sm-12">
              <div class="input-group">
                <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
                <asp:TextBox runat="server" ID="confirmEmail" TextMode="Email" CssClass="form-control" placeholder="Email.." />
              </div>
              <asp:RequiredFieldValidator runat="server" ID="confirmEmailValidator" ValidationGroup="ResetPasswordValidationGroup" ControlToValidate="confirmEmail" CssClass="text-danger" ErrorMessage="The email field is required." />
            </div>
          </div>
        </div>

      </div>
    </div>
    <div class="modal-footer">

      <asp:Button ID="btnSendNewPassword" ClientIDMode="Static" CssClass="btn btn-primary" Text="Reset" OnClick="SendNewPassword" runat="server" ValidationGroup="ResetPasswordValidationGroup"></asp:Button>
    </div>
  </div>
</div>
</div>

C#

 protected void SendNewPassword(object sender, EventArgs e)
    {
        if (IsValid)
        {
            var userName = confirmUserName.Text;
            var emailAddress = confirmEmail.Text;

            // Generate random password.
            string newPassword = Membership.GeneratePassword(12, 1);

            // create new manager
            var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new ApplicationDbContext()));

            // find the userName supplied.
            var user = manager.FindByName(userName);
            if (user != null)
            {

            }
            else
            {
                // cannot find a user for the 
                ResetPasswordFailureText.Text = "Unknown username";
                ResetPasswordErrorMessage.Visible = true;
            }
        }
        else
        {
            ResetPasswordFailureText.Text = "Invalid username, or email address.";
            ResetPasswordErrorMessage.Visible = true;
        }
    }

2 个答案:

答案 0 :(得分:1)

我认为你可以尝试一些事情:

  • 如果您需要显示消息,请在回发后通过javascript重新打开模式。例如,您可以将值存储在隐藏字段中,然后使用javascript进行检查。我认为这是一个简单的解决方案。

  • 您可以使用更新面板更新页面而不是模态。如果验证正常,您最终应该关闭对话框。这比仅重新打开模态要困难一些。

  • 作为最后一个选项,您可以使用正确的类重建服务器端的模态标记。我不会这样做,但如果找不到更好的东西......

答案 1 :(得分:0)

只需使用ASP.NET的ClientScriptManager.RegisterClientScriptBlock来执行$('#modalLostPassword')。modal('show');验证失败时