2015-04-26 3 views
0

У меня есть простой модальный, состоящий из стандартных проверенных полей ASP.NET, которые заботятся о том, чтобы конечный пользователь не выдавал необходимые поля при отправке формы.Хранить загрузочный модальный открытый, от кода позади

Все это работает, отлично. Тем не менее, я делаю еще одно validatio поля username, которое использует идентификатор ASP.NET для проверки правильности имени пользователя. Когда имя пользователя недопустимо, я использую тот же самый механизм проверки ошибок, что и ранее, однако, как только ASP.NET завершил обработку метода, модальная функция автоматически, закрыта, и пользователь не увидит сообщение до тех пор, пока не запустится модальный режим.

Как я могу оставить модальный диалог закрытым, пока я не с удовольствием сделаю это?

код ниже как модальный и код позади:

<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; 
     } 
    } 
+0

Можете ли вы пояснить, как это происходит с сервером? Вы отправляете запросы AJAX на сервер, чтобы проверить имя пользователя, или вы отправляете форму и перезагружаете всю страницу? Если первый, можете ли вы разместить свой javascript? –

+0

Привет, Майкл, все это отправляется стандартным механизмом сообщений asp.net, и я считаю, что он закрывается. Мне просто нужен способ держать его открытым. Я могу использовать ajax, вызывая в WebMethod, но тогда мне придется создавать свои собственные валидаторы – CSharpNewBee

ответ

1

Я думаю, вы можете попробовать несколько вещей:

  • заново модальный после postback через javascript, если вам нужно показать сообщение. Например, вы можете сохранить значение в скрытом поле, а затем проверить с помощью javascript. Я думаю, что это простое решение.

  • вы можете использовать панели обновления для обновления страницы, а не модальные. Вы должны закрыть диалоговое окно, если проверка правильна. Это немного сложнее, чем просто возобновить модальность.

  • В качестве последнего варианта вы можете перестроить серверную часть модальной разметки с помощью соответствующих классов. Я бы не сделать это, но если не находят ничего лучшего ...

+0

Привет, Давид, спасибо за ваш ответ - но повторное открытие, модальное, отличное UX - меня могут заставить свернуть мои собственные валидаторы, и использовать простые Ajax/WebMethods. – CSharpNewBee

+0

Мне нравится повторная модальная идея, если это сработает для вас, потому что все, что вам нужно сделать, - это скрытый флажок, например, который вы устанавливаете, когда форма отправляется, поэтому при обратной передаче вы проверяете ее с помощью JS, и если она установлена, вы просто открываете модальный '$ ('# modal'). modal ('show');' –

0

Просто используйте ClientScriptManager.RegisterClientScriptBlock ASP.NET, чтобы сделать $ («# modalLostPassword») модальность («шоу»). когда проверка не завершена

+0

снова, это будет, предположительно, близко, а затем снова открыто? – CSharpNewBee

+0

на самом деле закрытие фактически не происходит, когда вы делаете полную обратную передачу, вы в основном получаете новую страницу HTML, где диалог находится в исходном состоянии (т. Е. Закрыто). Теперь вы его открываете. – potatopeelings

Смежные вопросы