2016-11-25 2 views
0

Ich versuche, Benutzer-Account-Management in einer asp.net mvc5-Website arbeiten, die ich erstelle. Die neue Benutzererstellung funktioniert größtenteils, aber ich habe ein Problem, Fehler anzuzeigen, wenn während der Erstellung des Benutzers eine Ausnahme ausgelöst wird. Die Ausnahme wird abgefangen/behandelt und eine Fehlermeldung wird dem ModelState-Objekt in der Create() - Aktion meines AdminControllers hinzugefügt, aber der Fehler wird nicht angezeigt, wenn ich zur Create-Ansicht zurückkehre.Asp.net MVC5 Warum wird Html.ValidationSummary (false) keine Ausnahmefehler anzeigen?

Andere Arten von Benutzererstellungsfehlern, die nicht zum Auslösen einer Ausnahme führen, werden ordnungsgemäß angezeigt. Als eine Randnotiz stoppt ein "Spinner" in meinem Browser nie, wenn das Problem auftritt, und zeigt an, dass der Post, der die Erstellungsaktion initiiert hat, nie abgeschlossen wurde. Wenn ich im Browser auf ein Menü klicke, navigiere ich zur neuen Seite und der Spinner verschwindet.

Die Create() Fehler, die korrekt angezeigt werden und nicht mit einer Ausnahme zugeordnet auftreten, wenn:

var newUserCreateResult = UserManager.Create(newUser, password) 

kehrt:

newUserCreateResult.Succeeded == false 

Die create() Fehler, die sind mit zugeordnetem Ausnahme und nicht Anzeige ordnungsgemäß auftreten, wenn:

await UserManager.SendEmailAsync(newUser.Id, "Reset Password", "Please confirm your account and reset your password by clicking <a href=\"" + callbackUrl + "\">here</a>"); 

löst eine Ausnahme aus. Ich verwende einen SmtpMailService und eine Ausnahme wird ausgelöst, wenn der E-Mail-Server nicht erreichbar ist oder die Konfiguration des SMTP-Kontos falsch ist.

Einige Dinge, die ich versucht habe:

  1. @ Html.ValidationSummary (true)
  2. manuell die Fehlerliste durch Iterieren durch die Fehler in der Ansicht erstellen Model zu schaffen. Der Debugger zeigt an, dass der Code ausgeführt wird, aber es wird weiterhin nicht angezeigt.

Mein Create() Aktion:

 // PUT: /Admin/Create 
    [Authorize(Roles = "Admin")] 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    #region public ActionResult Create(CreateUserDTO createUserDTO) 
    public async Task<ActionResult> Create(CreateUserDTO createUserDTO) { 
     ApplicationUser newUser = null; 
     try { 
      if (createUserDTO == null) { 
       return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
      } 

      var Email = createUserDTO.Email.Trim(); 
      if (Email == "") { 
       throw new Exception("No Email"); 
      } 
      // Create user 
      newUser = new ApplicationUser { UserName = Email, Email = Email }; 
      var password = Membership.GeneratePassword(8, 3) + "aaZZ09"; 
      var newUserCreateResult = UserManager.Create(newUser, password); 

      if (newUserCreateResult.Succeeded == true) { 
       UserManager.AddToRole(newUser.Id, createUserDTO.SelectedRole); 
       string code = await UserManager.GeneratePasswordResetTokenAsync(newUser.Id); 
       code = HttpUtility.UrlEncode(code); 
       var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = newUser.Id, code = code }, protocol: Request.Url.Scheme); 
       await UserManager.SendEmailAsync(newUser.Id, "Reset Password", "Please confirm your account and reset your password by clicking <a href=\"" + callbackUrl + "\">here</a>"); 

       return Redirect("~/Admin"); 
      } else { 
       // Html.ValidationSummary displays these errors correctly 
       foreach (string msg in newUserCreateResult.Errors) { 
        ModelState.AddModelError(string.Empty, msg); 
       } 
      } 
     } catch (Exception ex) { 
      // Html.ValidationSummary DOESN NOT display these errors 
      ModelState.AddModelError(string.Empty, ex.Message); 
     } 
     if (newUser != null) { 
      UserManager.Delete(newUser); 
     } 
     createUserDTO.Roles = GetAllRolesAsSelectList(); 
     return View("Create", createUserDTO); 
    } 

Mein Create.cshtml Ansicht:

@model Nissan.Models.CreateUserDTO 
@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
@using (Html.BeginForm("Create", "Admin", FormMethod.Post, new { @class = "form-horizontal", role = "form" })) { 
    @Html.AntiForgeryToken() 
    <div class="form-horizontal"> 
     <h4>Create User</h4> 
     <hr /> 
     @Html.ValidationSummary(false, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.Email, 
      htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.Email, 
       new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.Email, "", 
       new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      @Html.LabelFor(model => model.Roles, 
      htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.DropDownListFor(model => model.SelectedRole, (Model == null) ? null : Model.Roles); 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Create" class="btn btn-default" /> 
       @Html.ActionLink("Cancel", 
       "Index", 
       null, 
       new { @class = "btn btn-default" }) 
      </div> 
     </div> 
    </div> 
} 

Antwort

0

Dieses Problem auf mysteriöse Weise verschwunden (nachdem ich meinen PC neu gestartet?). Es gibt nun Fehler von der Ausnahme aus, wie es sollte.

Verwandte Themen