ASP.NET MVC 5 de la Validation du Formulaire
Je suis nouvelle ASP.NET MVC et l'aide de la version 5. J'ai créé un formulaire qui est dans la mise en page, et je ne peux pas ne peut pas l'obtenir pour montrer les erreurs de validation sur la vue. Elle affichera à l'action correctement, et si le modèle est valide, il va exécuter. Si le modèle n'est pas valide j'ai l'erreur suivante s'affiche.
Je suis en espérant que quelqu'un peut me pointer dans la bonne direction. Je vous remercie à l'avance!
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
C'est mon modèle, je suis en utilisant:
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; }
}
C'est le code que j'ai dans ma Maison de contrôleur:
[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();
}
C'est la forme que j'ai dans ma mise en page:
@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>
}
Quel est le nom de fichier de votre
View
?
OriginalL'auteur BoredOfBinary | 2014-06-08
Vous devez vous connecter pour publier un commentaire.
Il y a une erreur dans votre code, je n'avais pas remarqué en premier. Dans la méthode que vous utilisez -
Ce qui signifie que votre vue ne permet pas de paramètre, mais quand il ya une erreur que vous utilisez -
Dans ce cas MVC est à la recherche de la vue avec le même nom mais qui accepte un paramètre de
Lead
type et il échoue dans la mesure où il n'existe pas de point de vue avec l'option, et le seul que l'on trouve n'accepte pas de paramètre comme on le voit à partir de la méthode Get. Quand il n'y a pas d'erreur, vous rediriger àet la Vue avec le paramètre n'est jamais nécessaire d'être recherchés et donc pas d'erreur.
Donc, de modifier l'affichage d'accepter un paramètre de
Lead
et de changer votre méthode d'obtenir en conséquence.Peut-être cela l'aiderait. -
et dans la vue d'ajouter
en haut
MODIFIER : Dans le cas puisque vous êtes rediriger vous devriez savoir que ModelState est initialisé à chaque demande, afin de rediriger les efface automatiquement. Vous devez utiliser d'autres moyens pour passer modelstate ou mieux, si vous utilisez la validation côté client.
J'ai ajouté une modification, laissez-moi savoir si cela aide
Ouaip c'est mieux. Parce que
ModelState
est initialisé à chaque demande, afin de rediriger les efface automatiquement. Vous devez utiliser d'autres moyens pour passer modelstate ou mieux, si vous utilisez la validation côté client.En fait, c'était trop facile, je vous remercie. J'ai seulement perdu une journée entière à cause de mon ignorance 🙂
Heureux, il a aidé. Assurez-vous de marquer la réponse, quelqu'un pourrait aussi perdre le jour pour elle.. 🙂
OriginalL'auteur brainless coder