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);
        }

    }

問題は、コントローラーがモデルに対して常に null を受け取ることです。私はそのコードを調べていますが、何が問題なのかわかりません。学習を始めたばかりなので、些細なことを見逃している可能性があります。何が問題なのか誰かが考えてくれることを願っています。

ありがとうございました。

4

1 に答える 1

4

EditorFor の代わりに DisplayFor を使用しているため、何も送信しません。

DisplayFor は、データを表示するために使用されます。

EditorFor は、テキスト ボックス、ラジオ ボタン、チェック ボックスなどのフォーム入力要素を追加するために使用されます。

edit
sormii がコメントでこれについて言及したので、回答に追加します。投稿される値をユーザーが変更できるようにする場合は、EditorFor を使用する必要がありますが、データを表示する (変更を許可しない) だけの場合は、各 DisplayFor の直後に HiddenFor を使用できます。これにより、投稿される非表示の入力が配置されます。

readonly=true を使用しようとしているように見えるので、そのためには TextBoxFor を使用することをお勧めします。

于 2013-04-30T15:18:48.990 に答える