2013-04-30 41 views
0

有很多關於此問題的帖子,但我仍然找不到正確的解決方案。目前我的模型,視圖和控制器是這樣的:POST操作後複雜模型爲空

查看:

@model Pro.Web.Models.CatDetailsView 

@using (Html.BeginForm("Details", "Cat", Model, FormMethod.Post)) 
{ 
@Html.AntiForgeryToken() 
@Html.ValidationSummary() 

<h2>Details</h2> 

<ol> 
    <li> 
     @Html.LabelFor(model => model.Cat.Name) 
     <p>@Html.DisplayFor(model => model.Cat.Name, new { @readonly = "true" })</p> 
    </li> 

    <li> 
     @Html.LabelFor(model => model.Cat.Owner) 
     <p>@Html.DisplayFor(model => model.Cat.Owner.UserName, new { @readonly = "true" })</p> 
    </li> 

    <li> 
     @Html.LabelFor(model => model.Cat.BornDate) 
     <p>@Html.DisplayFor(model => model.Cat.BornDate, new { @readonly = "true" })</p> 
    </li> 

    <li> 
     @Html.LabelFor(model => model.Cat.Age) 
     <p>@Html.DisplayFor(model => model.Cat.Age, new { @readonly = "true" })</p> 
    </li> 


    <li> 
     @Html.LabelFor(model => model.Cat.CatColorValue) 
     <p>@Html.DisplayEnumFor(model => model.Cat.CatColorValue, typeof(Pro.Web.Models.Entities.Enums.CatColor))</p> 
    </li> 

    <li> 
     @Html.LabelFor(model => model.Cat.Description) 
     <p>@Html.DisplayFor(model => model.Cat.Description, new { @readonly = "true" })</p> 
    </li> 

</ol> 

<input type="submit" value="Edit details" name="Command" /> 

} 

型號:

public class CatDetailsView 
{ 
    public Cat Cat { get; set; } 
} 

控制器:

[HttpPost] 
    public ActionResult Details(CatDetailsView model, string Command) 
    { 
     if (Command.Equals("Edit details")) 
     { 
      Cat cat = this._catRepository.Find(model.Cat.Id); 
      if (cat != null) 
      { 
       return RedirectToAction("Edit", "Cats", new { id = cat.Id }); 
      } 
      else 
      { 
       return View(model); 
      } 
     } 

     else 
     { 
      return View(model); 
     } 

    } 

問題是控制器總是收到模型的空值。我正在查看該代碼,看不到有什麼問題。我剛開始學習,所以我可能錯過了一些微不足道的東西。我希望有人有一個想法可能是一個問題。

謝謝。

回答

4

您正在使用DisplayFor而不是EditorFor,因此您不會提交任何內容。

DisplayFor用於顯示數據。

EditorFor是用來添加表單輸入元素,如文本框,單選按鈕,複選框等

編輯
sormii在評論中提到了這一點,所以我將它添加到答案。如果您希望用戶能夠更改發佈的值,那麼您應該使用EditorFor,但是如果您只想向他們顯示數據(不允許他們更改),那麼您可以在每個DisplayFor之後使用HiddenFor。這將會發布隱藏的輸入內容。

它看起來像你試圖使用readonly = true,所以我想你可能想使用TextBoxFor來做到這一點。

+1

總結:如果您想顯示值使用HiddenFor與DisplayFor – 2013-04-30 15:22:14

+0

謝謝。這工作!我把'HiddenFor'放在需要值的地方,現在我可以在控制器中獲得這些值。 – Cristiano 2013-04-30 16:36:41