3

ユーザーが一連のデータベース レコードを段階的に確認できるようにする MVC アクション メソッドを作成しようとしています。ユーザーが更新を投稿するたびに、更新がデータベースに送信され、レビューのために新しいレコードが取得およびレンダリングされます。

ただし、私の MVC ビューは、投稿されたビュー モデルと、データベース クエリの結果として作成された新しいビュー モデルの両方のデータを組み合わせているようです。ビューがビュー モデルからプロパティ値を単純にレンダリングする場合、渡されたビュー モデル インスタンスの値を正しく使用しますが、HTML フォーム コントロールをビュー モデル プロパティにバインドする場合は、ポストされたビュー モデルの値を使用します。これは、1 つのビューが、1 つのビュー モデル インスタンスの 1 つのプロパティに対して 2 つの異なる値を表示できることを意味します。

ここに画像の説明を入力

これはアクションメソッドの非常に単純化されたバージョンです...

public ActionResult Index(MyViewModel model)
{
    if (ModelState.IsValid)
    {
        // Write the posted model data to the repository
        // ...

        // Retrieve a new entity for the user to work on
        var alternate = new MyViewModel { Name = "New Name" };

        return View(alternate);
    }

    return View(model);
}

...そしてビューモデル...

public class MyViewModel
{
    [Required]
    public string Name { get; set; }
}

...そして、上の画像を作成するために使用されたビュー...

@model Mvc4TestApplication.ViewModels.MyViewModel

Name: @Model.Name
@using (Html.BeginForm())
{
    @Html.LabelFor(model => model.Name)
    @Html.TextBoxFor(model => model.Name)
    <input type="submit" value="Submit"/>
}

MVC ビューがモデル データを検出する方法を誤解しているようです。渡されたビュー モデルにフォーム コントロールをバインドするようビューに明示的に指示するために使用する代替構文はありますか?

ありがとう、

ティム。

4

1 に答える 1

4

ModelState をクリアしてみてください。htmlhelpers は ModelState を使用して値を取得しています。

ModelState.Clear();

View() を返す前に

于 2012-11-12T09:30:33.937 に答える