![](/img/trans.png)
[英]MVC ASP.NET Getting back my ViewData.Model in my View when I submit to a Controller
[英]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>
<% } %>
這些屬性應為string和bool類型嗎?
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.