Ho qualche problema con Html.ValidationSummary. Non voglio visualizzare errori di proprietà in ValidationSummary. E quando imposto Html.ValidationSummary (true) non visualizza messaggi di errore da ModelState. Quando c'è qualche eccezione in azione di controllo sulla stringaASP.NET MVC Html.ValidationSummary (true) non visualizza gli errori del modello
MembersManager.RegisterMember(member);
sezione cattura aggiunge un errore al ModelState:
ModelState.AddModelError("error", ex.Message);
Ma ValidationSummary non visualizza questo messaggio di errore. Quando imposto Html.ValidationSummary (false) tutti i messaggi vengono visualizzati, ma non voglio visualizzare errori di proprietà. Come posso risolvere questo problema?
Ecco il codice che sto utilizzando:
Modello:
public class Member
{
[Required(ErrorMessage = "*")]
[DisplayName("Login:")]
public string Login { get; set; }
[Required(ErrorMessage = "*")]
[DataType(DataType.Password)]
[DisplayName("Password:")]
public string Password { get; set; }
[Required(ErrorMessage = "*")]
[DataType(DataType.Password)]
[DisplayName("Confirm Password:")]
public string ConfirmPassword { get; set; }
}
Controller:
[HttpPost]
public ActionResult Register(Member member)
{
try
{
if (!ModelState.IsValid)
return View();
MembersManager.RegisterMember(member);
}
catch (Exception ex)
{
ModelState.AddModelError("error", ex.Message);
return View(member);
}
}
Vista:
<% using (Html.BeginForm("Register", "Members", FormMethod.Post,
new { enctype = "multipart/form-data" })) {%>
<p>
<%= Html.LabelFor(model => model.Login)%>
<%= Html.TextBoxFor(model => model.Login)%>
<%= Html.ValidationMessageFor(model => model.Login)%>
</p>
<p>
<%= Html.LabelFor(model => model.Password)%>
<%= Html.PasswordFor(model => model.Password)%>
<%= Html.ValidationMessageFor(model => model.Password)%>
</p>
<p>
<%= Html.LabelFor(model => model.ConfirmPassword)%>
<%= Html.PasswordFor(model => model.ConfirmPassword)%>
<%= Html.ValidationMessageFor(model => model.ConfirmPassword)%>
</p>
<div>
<input type="submit" value="Create" />
</div>
<%= Html.ValidationSummary(true)%>
<% } %>
Hanno risolto questo problema in MVC3? –
@LordCover: Sto indovinando che questo è "funzionante come progettato" e non un bug - il sovraccarico di ValidationSummary() usato di default esclude gli errori ModelState associati alle proprietà del modello stesso. Ciò lascia che tali errori siano rappresentati dalle chiamate Html.ValidationMessageFor() per ogni singola proprietà senza averle duplicate nel riepilogo. Ciò premesso, sembra che qualsiasi errore di modello aggiunto con una chiave non vuota sia considerato associato a una proprietà del modello, anche se la chiave non corrisponde al nome di una proprietà. –
Solo una nota per altri implementatori: 'ModelState.AddModelError (string.Empty, ex);' non sembra funzionare neanche. È necessario utilizzare l'overload 'ModelState.AddModelError (string, string)' come mostrato sopra. Aggiornamento – WolfyUK