Ah ja, das musste ich schon mal machen.Die Art und Weise, wie ich das gefunden habe, war, in der ViewData eine Markierung zu setzen, die angibt, welches Formular gepostet wurde, und dann habe ich meine eigene Erweiterungsmethode für ValidationSummary erstellt.
Der Code ist nicht mit mir im Moment, also werde ich mein Bestes tun, um einige Luft-Code dafür jetzt tun, es ist offensichtlich nur ein Konzept, wie es geht, also nehmen Sie es zum Nennwert.
Zum Anfang würde ich das gleiche Setup wie tvanfosson mit seinem 'EntryPageModel' vorgeschlagen verwenden.
View - beachten Html.MyValidationSummary
<% using(Html.BeginForm("NewAccount", "Account")) %>
<% { %>
<%= Html.MyValidationSummary("NewAccountForm") %>
<%= Html.TextBox("NewAccount.FirstName") %>
<%= Html.TextBox("NewAccount.LastName") %>
<%= Html.TextBox("NewAccount.Email") %>
<%= Html.Password("NewAccount.Password") %>
<%= Html.Password("NewAccount.ConfirmPassword") %>
<% } %>
<% using(Html.BeginForm("Login", "Account")) %>
<% { %>
<%= Html.MyValidationSummary("LoginForm") %>
<%= Html.TextBox("Login.Email") %>
<%= Html.Password("Login.Password") %>
<% } %>
-Controller - beachten Viewdata [ "PostedForm"]
public class Account : Controller
{
private EntryPageModel _viewModel;
public ActionResult NewAccount(FormCollection formValues)
{
try
{
//binding and validation for _viewModel.NewAccount
}
catch
{
ViewData["PostedForm"] = "NewAccountForm";
return View("RegisterAndLogin", _viewModel);
}
}
public ActionResult Login(FormCollection formValues)
{
try
{
//binding and validation for _viewModel.Login
}
catch
{
ViewData["PostedForm"] = "LoginForm";
return View("RegisterAndLogin", _viewModel); //You'll want to pass in a model
}
}
}
benutzerdefinierte HTML-Erweiterung
namespace System.Web.Mvc
{
public static class HtmlExtensions
{
public static string MyValidationSummary(this HtmlHelper html, string formName)
{
if (!string.IsNullOrEmpty(html.ViewData["PostedForm"])
&& (html.ViewData["PostedForm"] == formName))
{
return html.ValidationSummary();
}
return "";
}
}
}
HTHS, Charles
Aber Html.ValidationSummary() wählt alle Fehler für jedes Formular aus. – Pablo
In Bezug auf Code können Sie sich nur die Anmeldung ansehen und Kontoaktionen eines frisch erstellten Projekts erstellen. Jetzt habe ich eine logInOrCreateAccount() -Methode, die eine Ansicht mit zwei Formen zeigt, wobei eine auf logIn() und die andere auf createAccount() zeigt. – Pablo
Oh, ich verstehe. Ja, die Validierungszusammenfassung ist nicht formspezifisch. Sie können dies an einer zentralen Stelle oben auf der Seite einfügen oder einfach komplett weglassen. Es wäre nicht schwer, eigene zu schreiben, die entweder ein Präfix haben. –