0
<%@ 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?

+0

Überprüfen Sie dies, es kann Ihnen helfen http://StackOverflow.com/Questions/3838200/mvc-net-multiple-forms-childaction – jimplode

+0

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. –

+0

AJAX.BeginForm funktioniert hervorragend! –

Antwort

1

Die einzige Möglichkeit, nur die Teilansicht zu aktualisieren, ist AJAX, verwenden Sie AJAX.BeginForm oder verwenden Sie JQuery. Andernfalls wird erwartet, dass der gesamte Lebenszyklus durchlaufen wird.

HTH.

+0

Hey Brian, Prost für die Antwort. Ich werde es mir ansehen und sehen. –

+0

Es funktionierte Brillant! Vielen Dank. Dies muss auch aufgrund von Debug-Fehlern hinzugefügt werden. http://StackOverflow.com/Questions/2405966/error-with-AJAX-Beginform-on-ASP-net-mvc-page und ersetzen "if (debug)" durch "if (! HttpContext.Current.IsDebuggingEnabled)" –

Verwandte Themen