2017-07-13 4 views
0

Ich muss einige Felder aus einem Formular validieren, ich verwende keine Front-End-Sprache, um dies durchzuführen, ich bekomme die Informationen aus der ActionResult Ich muss einige zeigen Botschaft!So zeigen Sie eine Popup-Nachricht mit Aspnet Razor

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult ResetPassword(string user, string hash) 
    { 
     string old = Request.Form["oldpassword"]; 
     string password = Request.Form["password"]; 
     string repeat = Request.Form["repeatpassword"]; 


     if(String.IsNullOrEmpty(old) || String.IsNullOrEmpty(password) || String.IsNullOrEmpty(repeat)) 
     { 
      "show a dialog". 
     } 
+0

Sie den Nachrichtenwert zu einem JS modalen Popup passieren können : https://stackoverflow.com/questions/13183630/how-to-open-a-bootstrap-modal-window-using-jquery. Setzen Sie den modalen Popup-Text auf Basis des Viewmodels, z. '$ (" .modal-body "). text ('@ Model.Message')'. –

+1

Wenn Sie einen normalen POST erstellen, fügen Sie einen 'ModelStateError' hinzu und geben Sie die Ansicht so zurück, dass sie in Ihrem' @ Html.ValidationSummary() 'Platzhalter angezeigt wird. –

+0

Die 'ModelState.AddModelError' Methode ist ebenfalls gültig, verwenden Sie mindestens' ValidationSummary' oder 'ValidationMessage' an der richtigen Stelle:' $ (".modal-body"). Text ('@ Html.ValidationSummary()') '. –

Antwort

1

Dies ist ein guter Weg, es zu tun:

Ausblick:

@model Testy20161006.Controllers.ResetPasswordViewModel 
@{ 
    Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>IndexPage2</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css"> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> 
</head> 
<body> 
    @{ 
     if (ViewBag.ShowDialog != null && ViewBag.ShowDialog == true) 
     { 
      <script type="text/javascript"> 
       $(function() { 
        $("#aModal").modal('show'); 
       }) 
      </script> 
     } 
    } 
    @using (Html.BeginForm("ResetPassword", "Home")) 
    { 
     <div> 
      <table> 
       <tr> 
        <td>@Html.LabelFor(r => r.oldPassword)</td> 
        <td>@Html.TextBoxFor(r => r.oldPassword)</td> 
       </tr> 
       <tr> 
        <td>@Html.LabelFor(r => r.newPassword)</td> 
        <td>@Html.TextBoxFor(r => r.newPassword)</td> 
       </tr> 
       <tr> 
        <td>@Html.LabelFor(r => r.repeatNewPassword)</td> 
        <td>@Html.TextBoxFor(r => r.repeatNewPassword)</td> 
       </tr> 
      </table> 
     </div> 
     <input type="submit" value="submit" /> 
    } 
    @*modal*@ 
    <div class="modal fade" id="aModal" tabindex="-1" role="dialog" aria-labelledby="aModalLabel" 
     aria-hidden="true"> 
     <div class="modal-dialog" role="document"> 
      <div class="modal-content"> 
       <div class="modal-header"> 
        <h4 class="modal-title" id="aModalLabel">Warning</h4> 
       </div> 
       <div class="modal-body"> 
        Old Password, New Password, or repeat Password is empty. 
       </div> 
       <div class="modal-footer"> 
        <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button> 
       </div> 
      </div> 
     </div> 
    </div> 
</body> 
</html> 

Controller/Ansichtsmodell:

public class ResetPasswordViewModel 
{ 
    public string oldPassword { get; set; } 
    public string newPassword { get; set; } 
    public string repeatNewPassword { get; set; } 
} 

public class HomeController : Controller 
{ 
    [HttpPost] 
    public ActionResult ResetPassword(ResetPasswordViewModel resetPasswordViewModel) 
    { 
     if (String.IsNullOrEmpty(resetPasswordViewModel.oldPassword) || 
      String.IsNullOrEmpty(resetPasswordViewModel.newPassword) || 
      String.IsNullOrEmpty(resetPasswordViewModel.repeatNewPassword) 
      ) 
     { 
      //show dialog 
      ViewBag.ShowDialog = true; 
     } 

     return View("IndexPage2", resetPasswordViewModel); 
    } 

    public ActionResult IndexPage2() 
    { //start page specified in routeconfig.cs 
     return View(); 
    } 
+0

Sagen wir, dass ich ein paar wenige Dinge validieren muss? Das 'ViewBag.ShowDialog = true;' wird die Logik innerhalb von cshtml zeigen, wie man unterscheidet? –

+1

Mehr viewbags würde funktionieren. Der beste Weg besteht darin, das Attribut [erforderlich] für die erforderlichen Eigenschaften im Ansichtsmodell anzugeben. Überprüfen Sie in der Aktion ModelState.Valid und wenn gültig in db schreiben oder das Kennwort zurücksetzen, zeigen Sie andernfalls die Ansicht erneut an. Die Ansicht zeigt automatisch an, welche Felder die Validierung nicht bestanden haben. Html.ValidationSummary (false) zeigt alle Fehler an und Html.ValidationMessageFor (model => model.FieldName) fügt einen Fehler in die Felder ein. – kblau

+0

Verstanden! Vielen Dank! –

Verwandte Themen