MVC如何实现两个不同的post动作

时间:2012-06-20 20:43:11

标签: asp.net-mvc

我正在开发这个非常重要的松鼠应用程序。

有一个向导将松鼠添加到数据库中。

所以说这个向导有三个屏幕:

  1. 松鼠名称详情
  2. 身高和体重
  3. 坚果存储
  4. 因此,在向导的每个步骤中,我都希望将详细信息保存到数据库中。

    高度和重量视图如下所示:

    @model HeightWeightViewModel
    @{
        ViewBag.Title = "Height and weight";
    }
    
    <h2>Height and weight</h2>
    
    @using (Html.BeginForm()) {
    
        <h3>Height</h3>
        <div>
            @Html.EditorFor(model => model.Squirrel.Height)
        </div>
    
        <h3>Weight</h3>
        <div>
            @Html.EditorFor(model => model.Squirrel.Weight)
        </div>
        <input type="submit" value="Previous" />
        <input type="submit" value="Next" />
    }
    

    所以我希望Previous和Next按钮能保存这些细节。保存时的上一个按钮也将占用用户 到Squirrel名称详细信息页面。 Next将保存并将用户带到坚果存储页面。

    我使用下一步按钮工作:

    public ActionResult Edit(SquirrelViewModel squirrelViewModel)
            {
                _unitOfWork.SaveHeightWeight(squirrelViewModel);
    
                return RedirectToAction("Edit", "NutStorage", new { id = squirrelViewModel.Squirrel.Id });
            }
    

    所以Next按钮保存详细信息并将用户发送到NutStorage页面。

    “上一步”按钮与“下一步”相同,但实际上我希望它在保存后将用户发送到向导的第一步。

    我不知道该怎么做。我可以使用其他方法发布到上一个吗?

    我无法想象如何实现这一点。

    也许我应该使用ActionLinks而不是提交按钮,但不会发布要保存的详细信息。

    任何人都可以建议如何保存上一个按钮并将用户发送到向导的第一页 让Next功能有效吗?

1 个答案:

答案 0 :(得分:10)

您可以设置提交按钮的名称:

<input type="submit" name="direction" value="Previous" />
<input type="submit" name="direction" value="Next" />

然后将该名称添加为控制器操作的参数并测试其值以确定要执行的操作:

public ActionResult Edit(SquirrelViewModel squirrelViewModel, string direction)
{
    _unitOfWork.SaveHeightWeight(squirrelViewModel);

    if (direction == "Next")
        return RedirectToAction("Edit", "NutStorage", new { id = squirrelViewModel.Squirrel.Id });
    if (direction == "Previous")
        return RedirectToAction("Edit", "SquirrelName", new { id = squirrelViewModel.Squirrel.Id });
    return View();
}