私は単純な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)を使用して非表示フィールドを生成し、同じ効果でテストしました。何が問題ですか?