<%@ Page Language="C#" MasterPageFile="~/Views/Shared/MasterPage.Master" Inherits="System.Web.Mvc.ViewPage<EAZYITT_LOGIN.Models.CombinedViewModel>" %>
<asp:Content ContentPlaceHolderID="TitleContent" runat="server">
LoginPage
</asp:Content>
<asp:Content ContentPlaceHolderID="MainContent" runat="server">
<div id="LoginWindow">
<% Html.RenderPartial("LoginWindow", ViewData.Model.Logon); %>
<a id="ForgetPassword" href="#" onclick="loadSegment()">Forgot Password</a>
</div>
<div id="PassReminderWindow">
<% Html.RenderPartial("ReminderWindow", ViewData.Model.Reminder); %>
</div>
</asp:Content>
Jede Teilansicht mit getrennten Postbacks an den ServerWie Postbacks von mehreren stark typisierten Submit-Teilansichten in einer Ansicht behandelt werden?
Anmeldung stark typisiert:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<EAZYITT_LOGIN.Models.LogOnModel>" %>
<div id="loginPage">
<h2>Login Page</h2>
<h3>Submit your credentials to continue or register</h3>
<%: Html.ActionLink("New Registration", "Register")%>
<%: Html.ValidationSummary(true)%>
<%: Html.ValidationSummary()%>
<div class="validation-summary-errors">
<span id="loginError"></span>
</div>
<% using (Html.BeginForm("LoginWindow","Account",FormMethod.Post)) { %>
<%:Html.LabelFor(m =>m.EmailAddress) %>
<%:Html.ValidationMessageFor(m => m.EmailAddress) %>
<%:Html.TextBoxFor(m => m.EmailAddress) %>
<%:Html.LabelFor(m =>m.Password) %>
<%:Html.ValidationMessageFor(m => m.Password) %>
<%:Html.PasswordFor(m => m.Password)%>
<%:Html.CheckBoxFor(m => m.RememberMe)%>
<%:Html.LabelFor(m => m.RememberMe)%>
<p>
<input type="submit" value="Log On" />
</p>
<% } %>
</div>
Kennwort Erinnerung: in der
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<EAZYITT_LOGIN.Models.ReminderModel>"%>
<div id="PasswordReminderDiv">
<h2>PasswordReminder</h2>
<%: Html.ValidationSummary(true) %>
<div class="validation-summary-errors"><span
id="reminderError"></span></div>
<% using (Html.BeginForm("PasswordReminder",
"Account",FormMethod.Post))
{ //'8' o-o +:: %>
<%:Html.LabelFor(m=>m.ReminderEmailAddress) %>
<%:Html.ValidationMessageFor(m =>
m.ReminderEmailAddress)%>
<%:Html.TextBoxFor(m => m.ReminderEmailAddress) %>
<p>
<input type="submit" value="Send Reminder" />
</p>
<%} %>
</div>
Die Ergebnisse vorgelegt werden, um ihre getrennte Methoden Controller:
[HttpGet]
public ActionResult Login()
{
CombinedViewModel cModel = new CombinedViewModel();
cModel.Logon = new LogOnModel();
cModel.Reminder = new ReminderModel();
return View(cModel);
}
[HttpPost]
public ActionResult Login(CombinedViewModel _login)
{
return View(_login);
}
[HttpGet]
public ActionResult LoginWindow()
{
return PartialView();
}
[HttpPost]
public ActionResult LoginWindow(LogOnModel _login)
{
if (ModelState.IsValid)
{
if (LoginService.ValidateUser(siteId, _login.EmailAddress, _login.Password))
{
//Goto Next Page
ModelState.AddModelError("loginError", "LOGIN - OK");
}
else
{
//Failed Login
ModelState.AddModelError("loginError", "Wrong username or password");
}
}
return PartialView("LoginWindow", _login);
}
[HttpGet]
public ActionResult PasswordReminder()
{
return View();
}
[HttpPost]
public ActionResult PasswordReminder(ReminderModel _reminder)
{
TempData["ModelState"] = ModelState;
if (LoginService.ValidateNewUser(siteId, _reminder.ReminderEmailAddress))
ModelState.AddModelError("reminderError", "The E-mail address does not exist");
if (ModelState.IsValid)
{
ModelState.AddModelError("reminderError", "E-mail found, send e-mail to user");
}
return PartialView("PasswordReminder",_reminder);
}
Im Idealfall möchte ich die Hauptansicht (Login.aspx) unabhängig von der Überprüfung angezeigt werden.
Allerdings habe ich derzeit die Validierung auf jeder Teilansicht arbeiten, aber es bringt mich zu ihren separaten Teilansichten auf fehlgeschlagene Validierung im Gegensatz zu der Hauptansicht.
Wie würde ich es bekommen, nur die Teilansicht zu aktualisieren? Ist das der richtige Weg oder sollte ich AJAX benutzen?
Überprüfen Sie dies, es kann Ihnen helfen http://StackOverflow.com/Questions/3838200/mvc-net-multiple-forms-childaction – jimplode
Vielen Dank, nur einen Blick auf diesen Link. Ich habe diesen Ansatz versucht und es nicht geschafft, es zur Arbeit zu bringen. Will Ajax.BeginForm ausprobieren und werde zurückschreiben, wenn ich damit irgendwo hinkomme. –
AJAX.BeginForm funktioniert hervorragend! –