2014-06-08 33 views
5

Ich bin neu in ASP.NET MVC und mit Version 5. Ich habe ein Formular erstellt, das im Layout ist, und ich kann nicht erhalten Validierungsfehler auf der Ansicht zu zeigen. Es wird korrekt an die Aktion gesendet, und wenn das Modell gültig ist, wird es ausgeführt. Wenn das Modell ungültig ist, erhalte ich den folgenden Fehler.ASP.NET MVC 5 Form Validierung

Ich hoffe, dass jemand mich in die richtige Richtung zeigen kann. Vielen Dank im Voraus!

Server Error in '/' Application. 

The view 'ContactSubmit' or its master was not found or no view engine supports the searched locations. The following locations were searched: 
~/Views/Home/ContactSubmit.aspx 
~/Views/Home/ContactSubmit.ascx 
~/Views/Shared/ContactSubmit.aspx 
~/Views/Shared/ContactSubmit.ascx 
~/Views/Home/ContactSubmit.cshtml 
~/Views/Home/ContactSubmit.vbhtml 
~/Views/Shared/ContactSubmit.cshtml 
~/Views/Shared/ContactSubmit.vbhtml 

Das ist mein Modell verwende ich:

public partial class Lead 
{ 
    [Key] 
    public int LeadId { get; set; } 

    [Required] 
    [StringLength(50, MinimumLength=2, ErrorMessage="* A valid first name is required.")] 
    [Display(Name="First Name")] 
    public string FirstName { get; set; } 

    [Required] 
    [StringLength(50, MinimumLength=2, ErrorMessage="* A valid last name is required.")] 
    [Display(Name="Last Name")] 
    public string LastName { get; set; } 

    [Required] 
    [StringLength(50, MinimumLength=2, ErrorMessage="* A valid company is required.")] 
    public string Company { get; set; } 

    [Required] 
    [StringLength(50)] 
    [EmailAddress(ErrorMessage="* A valid email address is required.")] 
    public string Email { get; set; } 

    [Required] 
    [StringLength(15, MinimumLength=9, ErrorMessage="* A valid phone nunber is required.")] 
    [Phone(ErrorMessage="Please enter a valid phone number.")] 
    public string Phone { get; set; } 
} 

Dies ist der Code, den ich in meiner Heimsteuerung habe:

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult ContactSubmit(
    [Bind(Include = "FirstName, LastName, Company, Email, Phone")] 
    Lead lead) 
{ 
    try 
    { 
     if (ModelState.IsValid) 
     { 
      lead.Tenant = SessionManager.Get<Tenant>(Constants.SessionTenant); 
      lead.Refferer = SessionManager.Get<string>(Constants.SessionRefferal); 
      DataStoreManager.AddLead(lead); 
      return RedirectToAction("SubmissionConfirmed", lead); 
     } 
    } 
    catch (DataException /* dex */) 
    { 
     ModelState.AddModelError("", "Unable to perform action. Please contact us."); 
     return RedirectToAction("SubmissionFailed", lead); 
    } 

    return View(lead); 
} 

[HttpGet] 
public ActionResult ContactSubmit() 
{ 
    return View(); 
} 

Dies ist die Form, die ich in meinem Layout :

   @using (Html.BeginForm("ContactSubmit", "Home", FormMethod.Post)) 
        { 
         @Html.AntiForgeryToken() 
         <fieldset> 
          <div class="editor-label"> 
           @Html.LabelFor(m => m.FirstName) 
          </div> 
          <div class="editor-field"> 
           @Html.EditorFor(m => m.FirstName) 
           @Html.ValidationMessageFor(m => m.FirstName) 
          </div> 

          <div class="editor-label"> 
           @Html.LabelFor(m => m.LastName) 
          </div> 
          <div class="editor-field"> 
           @Html.EditorFor(m => m.LastName) 
           @Html.ValidationMessageFor(m => m.LastName) 
          </div> 

          <div class="editor-label"> 
           @Html.LabelFor(m => m.Company) 
          </div> 
          <div class="editor-field"> 
           @Html.EditorFor(m => m.Company) 
           @Html.ValidationMessageFor(m => m.Company) 
          </div> 

          <div class="editor-label"> 
           @Html.LabelFor(m => m.Email) 
          </div> 
          <div class="editor-field"> 
           @Html.EditorFor(m => m.Email) 
           @Html.ValidationMessageFor(m => m.Email) 
          </div> 

          <div class="editor-label"> 
           @Html.LabelFor(m => m.Phone) 
          </div> 
          <div class="editor-field"> 
           @Html.EditorFor(m => m.Phone) 
           @Html.ValidationMessageFor(m => m.Phone) 
          </div> 
          <div class="masthead-button-wrapper"> 
           <input class="btn btn-warning" type="submit" value="Submit" /> 
          </div> 
         </fieldset> 
        } 
+0

Wie lautet der Dateiname Ihrer 'Ansicht'? –

Antwort

2

Es gibt einen Fehler in Deinen Code habe ich zuerst nicht bemerkt. In der get-Methode Sie verwenden -

return View(); 

Was bedeutet, dass Ihre Sicht nicht Parameter erlaubt, aber wenn es einen Fehler, den Sie verwenden -

return View(lead); 

In diesem Fall ist MVC für die Ansicht, die mit Der gleiche Name, aber auch akzeptiert einen Parameter Lead Typ und es schlägt fehl, da es keine Ansicht mit dieser Option gibt und die einzige, die gefunden wird akzeptiert Parameter nicht wie von der Get-Methode gesehen. Wenn kein Fehler vorhanden ist, werden Sie auf -

return RedirectToAction("SubmissionConfirmed", lead); 

und die Ansicht mit dem Parameter benötigt wird, um nie gesucht und somit keinen Fehler sein.

Ändern Sie also die Ansicht, um einen Parameter von Lead zu akzeptieren und ändern Sie Ihre Methode entsprechend.

Vielleicht würde dies helfen. -

[HttpGet] 
public ActionResult ContactSubmit() 
{ 
    var lead = new Lead(); 
    return View(lead); 
} 

und in der Ansicht hinzufügen

@model Lead 

an der Spitze

EDIT: Falls da Sie Umleitung sollten Sie wissen, dass Model in jeder Anforderung initialisiert wird, so Umleitung löscht es automatisch. Sie müssen eine andere Methode verwenden, um modelstate oder besser zu übergeben, wenn Sie die clientseitige Validierung verwenden.

+0

Ja, ich habe beide diese gesetzt – BoredOfBinary

+0

Ich habe eine Bearbeitung hinzugefügt, lassen Sie mich wissen, wenn dies hilft –

+0

Versucht, dass und immer noch nicht funktioniert. Nur um sicherzustellen, dass Sie sich bewusst, das Formular in einer Layout-Vorlage, also wenn ich auf Index bin, sollte es mit den Validierungsfehlern zurück zum Indexformular gehen. – BoredOfBinary