LabelFor
ヘルパー メソッドは、このようなラベルをレンダリングします。
<label for="Increment">Increment</label>
これは、mdoel の Increment プロパティの値を表示しません。それが必要な場合は、次のようにレンダリングするだけです
<p>@Model.Increment</p>
または、DisplayFor()
ヘルパー メソッドを使用します。
@Html.DisplayFor(s=>s.Increment)
これは、値をページにレンダリングするだけでもあります。フォームを投稿すると、ページの現在の値が HttpPost アクションに投稿されません。そのためにはフォームフィールドが必要です。テキストボックス、隠しフィールドなどにすることができます.
@using(Html.BeginForm())
{
@Html.DisplayFor(s=>s.Increment)
@Html.HiddenFor(s => s.Increment)
<input type="submit"/>
}
ただし、値を投稿してアクションメソッドでインクリメントして送り返すと、入力フィールド(非表示フィールド)の値が毎回新しい値で更新されるわけではありません。これは、最初の更新後のModelStateDictionary
値です。この値は、Increment
プロパティの非表示フィールドをレンダリングするときに使用されます。それがあなたが価値として見ている理由で1
あり、それは決して変わりません。
この項目を ModelStateDictionary から明示的に削除する必要があります。
[HttpPost]
public ActionResult Index(IncrementModel IM)
{
IM.Increment++;
ModelState.Remove("Increment");
return View(IM);
}