1

私は ASP.NET MVC に非常に慣れていないため、簡単に実行できるように思われることに問題があります。

この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" />
}

そしてこのコントローラー:

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 の 2 回目 (およびそれ以降) のクリックでは、Step.Two ではなく Step.One として読み取られるため、ビューでは何も更新されません。

ここで私が見逃していることは明らかですか?値が正しく読み取られない/保存されないのはなぜですか?

4

1 に答える 1