1

編集投稿で変更日がデフォルトにリセットされるという問題がありました。モデル バインダーは、ビューの一部ではないプロパティを無視しているようです。@Html.HiddenFor(m => m.ModifiedDate) を追加するとすぐに、ポスト アクションに渡されるオブジェクトに元の値が含まれます。

このプロセスを通じてすべてのプロパティ値が保持されると考えていましたが、そうではないようです。モデルに sql データベースを使用していますが、現在のコンテキストでは一部のフィールドを編集できません。これは、元のデータの整合性を確保するために、編集できないすべてのプロパティに HiddenFor を使用する必要があるということですか?

もしそうなら、追加された新しいフィールドが自動的に含まれるようにする方法はありますか?

post メソッドの例

    [HttpPost]
    public ActionResult Edit(Customer customer)
    {
        //Some code here
    }

そして景色

@model MyApp.Models.Customer
@{
  ViewBag.Title = "Edit";
}
<h2>
    Edit</h2>
@using (Html.BeginForm())
{
 <fieldset>
    @Html.HiddenFor(m => m.ModifiedData)
    @*Some other fields*@
 </fieldset>
    <p>
        <input type="submit" value="Save" />
    </p>
}
4

1 に答える 1

3

MVC は、フォーム内の要素のみを投稿します。ViewState に値を保持する ASP.Net とは異なり、標準の HTTP ポスト方法論を使用します (これは非表示の要素としてもフォームに効果的に保持されますが、実際には表示されません)。はい、値を永続化したい場合は、フォームに保存する必要があります。

ASP.Net に対するこれの利点は、HTTP で前後に渡されるものを完全に制御できることです。そのため、巨大な ViewState がいたるところに渡されることはなく、その 90% はおそらく使用されません。このようにして、ネットワーク経由で送信されるデータを、ASP.Net ではできなかった方法で調整できます。

いいえ、非表示の要素が確実に入力されるようにする方法はありません。これは自分で行う必要があります。繰り返しますが、これはフォームがステートレスであるためです。適切な Web サイトがそうであるように!

セッションを使用することもできますが、お勧めしません。

于 2012-11-05T09:48:22.413 に答える