0

有很多关于这个问题的帖子,但我仍然找不到正确的解决方案。目前我的模型、视图和控制器如下所示:

看法:

@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

1 回答 1

4

您使用的是 DisplayFor 而不是 EditorFor,因此您不会提交任何内容。

DisplayFor 用于显示数据。

EditorFor 用于添加表单输入元素,如文本框、单选按钮、复选框等。

编辑
sormii 在评论中提到了这一点,所以我会将其添加到答案中。如果您希望用户能够更改发布的值,那么您应该使用 EditorFor,但如果您只想向他们显示数据(不允许他们更改),那么您可以在每个 DisplayFor 之后使用 HiddenFor。这将放置一个隐藏的输入,该输入将被发布。

看起来您正在尝试使用 readonly=true,所以我认为您可能想要使用 TextBoxFor 来做到这一点。

于 2013-04-30T15:18:48.990 回答