3

私はMVC 4を初めて使用します。やりたいことは、増分整数を表示するラベルを作成することです

cshtmlページで

@Html.LabelFor(m => m.Increment, Model.Increment)

コントローラーページで

public ActionResult Index(IncrementModel IM){
    IM.Increment ++;
    return View(IM);
}

最初の結果は 0 で、これを 1 つ押すと 1 に増加し、何度押しても値は永遠に 1 になります。

4

2 に答える 2

1

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);
}
于 2015-12-31T04:42:03.487 に答える
0

ラベルは表示のみです。その値はサーバーに送信されません。代わりにテキスト ボックスを使用し、フォームに配置します。

@Html.TextBoxFor(m => m.Increment);
于 2015-12-31T04:14:54.013 に答える