我正在开发我的第一个ASP.NET MVC 3应用程序,我有两个带有视图的控制器,IceCreamController / IceCreamView和RecipeController / RecipeView,每个用户都可以进行选择并显示配方。
选择会导致显示PartialView,其中包含Edit链接。单击时,将显示此配方的EditView,允许用户编辑所选配方项的属性。
大。这工作正常,但目前RecipeController中的POST操作如下所示:
[HttpPost]
public ActionResult Edit(RecipeViewModel viewModel)
{
// updates the underlying model with the viewModel
// other things not germane to the discussion
return View();
}
并且最终总是显示Recipe的Index视图,这不是我想要的。相反,我希望能够做的是在用户提交更改后将用户发送回相应的View(IceCreamView或RecipeView)。
我认为其他人已经做了类似的事情。如何在编辑完成时告知应将哪些控制器/操作重定向到?
注意: 我在上面添加了一点,以澄清我有两个独立的控制器(IceCreamController和RecipeController),每个控制器都有一个可以选择并最终执行的视图
@Html.Partial("_Recipe", model.recipe)
显示特定食谱的详细信息。我的问题是如何通过RecipeController上的编辑操作将页面重定向回IceCreamView或RecipeView - 本质上,如何通过任一路径显示配方详细信息,我该如何进行通信。
使用解决方案:
正如您在Darrin的回答评论中所述,由于我涉及的控制器不止一个,因此解决方案是利用viewmodel传入控制器/操作,应该在编辑时将其重定向到以下内容邮政行动完成。
由于我有多个这种情况的实例(通过多个路径到达Edit页面),我认为创建一个简单的BaseViewModel来保存这个功能可能是有序的,然后让所有适用的viewmodel继承自那个BaseViewModel。
我认为它不应该像以下那样:
public BaseViewModel
{
public BaseViewModel(string controller, string action)
{
ControllerName = controller ?? string.empty;
ActionName = action ?? string.empty;
}
public string ControllerName { get; set; }
public string Action { get; set; }
}
然后可以修改viewmodel的构造函数以传递控制器/动作并将其交给基类。
可能还有其他解决方案,如果有,我希望听到它们。
答案 0 :(得分:4)
[HttpPost]
public ActionResult Edit(RecipeViewModel viewModel)
{
// updates the underlying model with the viewModel
// other things not germane to the discussion
return View("IceCreamView");
}
或者如果你想重定向,你可以有一个控制器动作来提供这个视图,然后return RedirectToAction("IceCream");
这可能更正确,而不是直接从POST动作返回一个视图,以防万一。