0

この単純なコントローラー アクションが機能しない理由を理解しようとしています。私がやろうとしているのはNumber、すべての POST の後に増加することだけです。

モデル

public class ViewModel
{
    public int Number { get; set; }
}

意見

<body>

    <% using (Html.BeginForm("Test", "Invoice"))
    { %>
        <%: Html.EditorFor(m => m.Number) %>
        <%= Model.Number %>
        <input type="submit" value="Submit" />
    <% } %>

</body>

コントローラ

public ActionResult Test()
{
   var viewModel = new ViewModel {Number = 1};
   return View("Test", viewModel);
}

[HttpPost]
public ActionResult Test(ViewModel viewModel)
{
    viewModel.Number = viewModel.Number + 1;
    return View("Test", viewModel);
}

私のコントローラーでviewModel.Numberは、 に増加し2ますが、ビューが返されると、テキスト ボックスには 2 が含まれ1Model.Number表示されます。

何か不足していますか?

4

1 に答える 1

0

Html ヘルパーはModelState、実際のモデル値よりも値を優先します。

したがって、アクションでモデルを変更する場合はModelSate、ビューに渡す前に をクリアする必要があります。

[HttpPost]
public ActionResult Test(ViewModel viewModel)
{
    viewModel.Number = viewModel.Number + 1;
    ModelState.Clear();
    return View("Test", viewModel);
}

この ASP.NET MVC 機能の詳細については、次の素晴らしい記事をご覧ください。

モデルの変更を無視する ASP.NET MVC ポストバックと HtmlHelper コントロール

于 2013-04-05T20:33:36.127 に答える