Asp.net mvc 4 不保留模型值

Asp.net mvc 4 不保留模型值,asp.net-mvc-4,Asp.net Mvc 4,我是ASP.NETMVC的新手,我遇到了一些问题,似乎这应该是一个不需要动脑筋的问题 使用此ViewModel: public enum Step { One = 1, Two = 2, Three = 3 } public class TestViewModel { public string Description { get { return "Current step is " + this

我是ASP.NETMVC的新手,我遇到了一些问题,似乎这应该是一个不需要动脑筋的问题

使用此ViewModel:

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" />
}
在第一次点击按钮时,控制器设置模型。一步到一步。第二步,我的视图正确更新

但是,在第二次(以及任何后续)点击按钮模型时,步骤被解读为步骤。一而不是步骤。二,因此在我的视图中没有任何更新


这里有什么明显的我遗漏的吗?为什么没有正确读取/保存值?

视图中不需要if-else块。你基本上在做同样的事情。这也将有助于:

@using (Html.BeginForm("Test", "Home"))
{
    @Html.HiddenFor(m => m.Step)
    <p>@Model.Description</p>

    <input type="submit" value="Continue" />
}

这将把模型序列化为querystring。更好的方法是将一些ID作为参数传递。

谢谢Ufuk。这似乎很管用。
@using (Html.BeginForm("Test", "Home"))
{
    @Html.HiddenFor(m => m.Step)
    <p>@Model.Description</p>

    <input type="submit" value="Continue" />
}
[HttpPost]
public ActionResult Test(TestViewModel model)
{
    Debug.Print("Enter: Step = {0}", model.Step);

    switch (model.Step)
    {
        case Step.One:
            model.Step = Step.Two;
            break;
        case Step.Two:
            model.Step = Step.Three;
            break;
        case Step.Three:
            model.Step = Step.One;
            break;
    }

    Debug.Print("Enter: Step = {0}", model.Step);

    return RedirectToAction("SomeAction", model);
}