簡體   English   中英

ASP.net MVC2。 填充的模型沒有回到控制器

[英]ASP.net MVC2. Populated model is not getting back to the controller

假設我在登錄字段中輸入了“ email@domain.com”和“密碼”。

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

這些屬性應為stringbool類型嗎?

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

看了一段時間后,我發現了。

我正在為整個模型提供視圖(包括“登錄”,“注冊”和“忘記密碼”模型),然后提交整個模型(僅填充了其中一個)。 然后,當控制器調用傳入的模型時,它僅在較大模型中尋找其中一個模型。

我最初只是通過將片段傳遞給視圖並適當地返回它們來解決該問題。 當我更改代碼時,我破壞了以前的工作方式。

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

...

using FCX.Models.Auth;

...

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

        ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM