我对 ASP.NET MVC 很陌生,我遇到了一些看起来应该不费吹灰之力的事情。
使用此视图模型:
public enum Step
{
One = 1,
Two = 2,
Three = 3
}
public class TestViewModel
{
public string Description
{
get
{
return "Current step is " + this.Step;
}
}
public Step Step { get; set; }
public string Dummy{ get; set; }
public TestViewModel()
{ }
public TestViewModel(Step step)
{
this.Step = step;
}
}
这个观点:
@using MvcApplication1
@model TestViewModel
@using (Html.BeginForm("Test", "Home"))
{
if (Model.Step == Step.One)
{
@Html.HiddenFor(m => m.Step)
@Html.HiddenFor(m => m.Dummy)
<p>@Model.Description</p>
}
else if (Model.Step == Step.Two)
{
@Html.HiddenFor(m => m.Step)
@Html.HiddenFor(m => m.Dummy)
<p>@Model.Description</p>
}
else if (Model.Step == Step.Three)
{
@Html.HiddenFor(m => m.Step)
@Html.HiddenFor(m => m.Dummy)
<p>@Model.Description</p>
}
<input type="submit" value="Continue" />
}
这个控制器:
public ActionResult Test()
{
TestViewModel model = new TestViewModel(Step.One);
return View(model);
}
[HttpPost]
public ActionResult Test(TestViewModel model)
{
Debug.Print("Enter: Step = {0}", model.Step);
switch (model.Step)
{
case Step.One:
model.Step = Step.Two;
model.Dummy = "2";
break;
case Step.Two:
model.Step = Step.Three;
model.Dummy = "3";
break;
case Step.Three:
model.Step = Step.One;
model.Dummy = "1";
break;
}
Debug.Print("Enter: Step = {0}", model.Step);
return View(model);
}
在第一次单击按钮时,控制器将 model.Step 设置为 Step.Two,并且我的视图已正确更新。
但是在按钮 model.Step 的第二次(以及任何后续)单击被读取为 Step.One 而不是 Step.Two 所以我的视图没有更新。
我在这里有什么明显的遗漏吗?为什么没有正确读取/保存值?