2010-10-27 45 views
0

假設我在登錄字段中輸入'[email protected]'和'密碼'。ASP.net MVC2。填充模型不回到控制器

AuthModel.cs中的數據註釋返回值未填充。因此,html表單中的數據永遠不會填充正在拋出的模型。

在我的迷人之處,我昨天在關閉解決方案之前做了很多匆忙的修改,沒有測試我所做的修改。因此,我不知道我改變了什麼來打破這一點。

如果我需要發佈任何東西讓我知道。

AuthController.cs

... 

using FCX.Models.Auth; 

... 

// GET: /auth/login 
[HttpPost] 
public ActionResult Login(Login model) 
{ 
    if (ModelState.IsValid) 
    { 
     ... 

AuthModel.cs

public class AuthModel 
{ 
    public Login Login { get; set; } 
    public ForgotPassword ForgotPassword { get; set; } 
    public Register Register { get; set; } 
} 

... 

public class Login 
{ 
    [Required 
     (ErrorMessageResourceName = "Login_Error_HandleRequired", 
     ErrorMessageResourceType = typeof(Resources.Auth))] 
    [Email(ErrorMessage="Invalid Email")] 
    public string Handle { get; set; } 
    [Required 
     (ErrorMessageResourceName = "Login_Error_PasswordRequired", 
     ErrorMessageResourceType = typeof(Resources.Auth))] 
    public string Password { get; set; } 
    public bool Memory { get; set; } 
} 

而且Index.aspx的是登錄表單。

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Templates/FullColumn.Master" Inherits="System.Web.Mvc.ViewPage<FCX.Models.Auth.AuthModel>" %> 

... 

<% Html.EnableClientValidation(); %> 
<%=Html.ValidationSummary() %> 
<% using (Html.BeginForm("login", "auth")) 
    { %> 
<div id="login-block" class="entry-block"> 
    <h4> 
     Sign in</h4> 
    <ul> 
     <li> 
      <label for="Login_Handle"> 
       Email Address</label><%=Html.TextBoxFor(Model => Model.Login.Handle, new { @class = "txt-input" })%></li> 
     <li> 
      <label for="Login_Password"> 
       Password</label><%=Html.PasswordFor(Model => Model.Login.Password, new { @class = "txt-input" })%></li> 
     <li> 
      <%=Html.CheckBoxFor(Model => Model.Login.Memory, new { @class = "left-input" })%><label 
       for="Login_Memory" class="right-label">Keep me logged in</label></li> 
     <li> 
      <button type="submit" name="Login.Submit" value="1"> 
       Sign in</button></li> 
    </ul> 
</div> 
<% } %> 
+0

在AuthController.cs,我改變登錄(登錄模式)登陸(AuthModel模型),改變從(例如)model.EmailAddress所有的內部引用model.Login.EmailAddress和工作的罰款。 仍試圖找出爲什麼上述方法工作了一段時間,然後就停止工作。 – castis 2010-10-27 19:42:29

回答

0

看了一段時間後,我想通了。

我給整個模型(包括登錄,註冊和忘記密碼模型)提交視圖,然後提交整個模型(其中只有一個模型已填充)。然後當控制器要求傳入的模型時,它只能在更大的模型中尋找其中一個模型。

我最初只是通過將片段傳遞給視圖並正確地返回它。當我改變我的代碼時,我打破了以前的工作方式。

使用上面的例子。我需要改變的是Login()使用視圖正在使用的整個模型的參數。

... 

using FCX.Models.Auth; 

... 

// GET: /auth/login 
[HttpPost] 
public ActionResult Login(AuthModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     Login loginData = model.Login; 

     ... 
+0

你可以爲未來的訪問者發佈更正後的代碼嗎? – MattC 2010-10-28 08:34:31

1

如果這些屬性是類型布爾的?

public class AuthModel 
{ 
    public ->string<- Login { get; set; } 
    public ->string<- ForgotPassword { get; set; } 
    public ->bool<- Register { get; set; } 
} 
+0

不,這是一個模型來容納較小的模型。視圖使用AuthModel來幫助顯示錶單元素。 – castis 2010-10-27 18:02:26