1

私は単純なMVCコントローラーとビューとモデルを持っています(問題を理解するために他のすべてのコードを削除しました)モデルは単純な1つのプロパティクラスです:

public class SiteFileUploadModel
{
    [Required]
    public int ActivePage { get; set; }
}

ビューも非常にシンプルです。

@model Models.SiteFileUploadModel
@{
      ViewBag.Title = "Index";
 }
 <h2>Index</h2>
 @if (Model != null)
 {
      using (this.Html.BeginForm("Index", "SiteFileUpload"))
      {
           @Html.Hidden("ActivePage",Model.ActivePage)
           @Model.ActivePage
           switch (Model.ActivePage)
           {
                case 1:
                    <p>Page 1</p>
                    break;
                case 2:
                    <p>Page 2</p>
                    break;
           }
           <button type="submit" name="actionButtons">Previous</button>
           <button type="submit" name="actionButtons">Next</button>
      }
  }

コントローラには1つの方法しかありません。

public class SiteFileUploadController : Controller
{
    //
    // GET: /FileUpload/SiteFileUpload/
    [HttpGet]
    public ActionResult Index()
    {
        var model = new SiteFileUploadModel();
        model.ActivePage = 1;
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SiteFileUploadModel model, string actionButtons)
    {
        if (actionButtons == "Next")
        {
            model.ActivePage++;

        }
        if (actionButtons == "Previous")
        {
            model.ActivePage--;
        }

        return View(model);
    }

}

実行して[次へ]を押すと、model.activePageが2になり、出力にも表示されます(2と2ページが表示されます)が、非表示の値は1のままです。実際、非表示の値は常に1であり、 ActivePageの実際の値には従いません。また、HiddenFor(m => m.ActivePage)を使用して非表示フィールドを生成し、同じ効果でテストしました。何が問題ですか?

4

1 に答える 1

1

この回答を参照してください。

簡単に言うと、ビューを再表示する前に ModelState をクリアする必要があります。これは、Html ヘルパーがモデルではなくモデルの状態をデータに使用するためです。

次のステートメントをコントローラー アクションに追加します。

ModelState.Clear();
于 2012-05-23T09:50:41.430 に答える