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>

各部分ビューは、サーバーへの個別のポストバックで厳密に型指定されます

ログイン:

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

パスワードリマインダー:

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

結果は、コントローラーの個別のメソッドに送信されます。

         [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);     
         }

理想的には、検証に関係なくメイン ビュー (Login.aspx) を表示したいと考えています。

ただし、現在、各部分ビューの検証が機能していますが、メイン ビューとは対照的に、失敗した検証の個別の部分ビューに移動しています。

部分ビューのみを更新するにはどうすればよいですか? これはそれを行う方法ですか、それとも AJAX を使用する必要がありますか?

4

1 に答える 1

1

部分ビューのみを更新する唯一の方法は AJAX で、AJAX.BeginForm を使用するか、JQuery を使用します。それ以外の場合は、ライフサイクル全体を通過することを期待しています。

HTH。

于 2010-12-13T13:41:37.410 に答える