5

ViewBagの動的プロパティに問題があるようです。私が持っているとしましょう:

@{
    ViewBag.Title = @Model.CourseName;
}

そして、私が持っているページのフォームで:

@Html.TextBox("Title", null, new {style="width:400px;"})

Titleは、データベーステーブルのフィールドの名前です。

ページが最初に開いたとき、IDが「Title」のテキストボックスは、ViewBag.Title動的プロパティの値を取ります。

モデルバインディングの正確な詳細については少しぼんやりしていますが、これはバグのようです。そうでない場合は、バインディングプロセスの結果として自然に発生するものである場合は、警告が表示されると便利です。これ。

私が見つけた回避策は、ViewBagプロパティの名前を次のように変更することでした。

@{
    ViewBag.Titulo = @Model.CourseName;
}

(タイトルがTituloに変更されました-名前の衝突を避けるために、常に別の言語を知っておくとよいでしょう...)

そして、問題は解決しました。

ただし、問題は次のとおりです。

この動作は予想されるものですか?バグは簡単に見つけることができましたが(この質問を書くことを含めて、それを理解するのに1時間かかりました)、他のバグの方がもっと多いのではないかと思います。

編集:

質問の言い換え:

モデルバインダーは、ViewBagで見つかったプロパティを自動的にバインドしますか?強く型付けされたViewModelに既存のプロパティが存在する場合でも、ページに渡しましたか?確かにViewModelが優先されるべきですか?

4

1 に答える 1

5

Html.TextBox は最初にViewData/ViewBag値をチェックし、次にModel. Model価値があることを確認するには、 を使用する必要がありますHtml.TextBoxFor

于 2011-02-24T12:08:23.740 に答える