在我开始捏造自己的方法之前,我正在把头发拉过这个,我正在寻找指导。
这就是我所拥有的:
查看摘要
<td>@Html.ActionLink("More Details", "Index", new { id = product.ProductId })</td>
<td>@Html.ActionLink("Compare", "Compare", new { id = product.ProductId, compare = true })</td>
控制器代码段
public ActionResult Index(FormCollection values)
{
// Does stuff, works
}
public ActionResult Index(int productId)
{
// Does stuff, works
}
现在,这就是我的问题所在。现在,从POST到表单,以及单击“更多详细信息”ActionLink,都会使用索引函数。这很好。
现在我希望“比较”功能正常,我希望在同一页面上保存一份比较产品列表,这很好。但是如何在同一个视图/页面上获得比较功能?!
我试过了:
public ActionResult Compare(int productId)
{
}
但显然这不起作用,因为它需要一个Compare.cshtml,我不想发生。我希望它能够修改我的ViewModel并使用新的Compare产品返回它,所以我可以从我原来的View中做到这一点:
@foreach(var products in Model.ComparedProducts)
我能看到我这样做的唯一方法就是“捏造它”:
public ActionResult Index(int productId = 0, bool compare)
{
}
在同一页面上有很多功能可能会变得难以驾驭。
肯定有一些明显我在这里缺席的东西?
哦,AjaxLink选项不适合我,因为这是必须通过回发(Progress Enhancement和所有爵士乐)工作的网站的一部分。
答案 0 :(得分:9)
我认为你通过调用return View(model)
返回一个ActionResult,是吗?如果没有明确命名视图 ,MVC解析机制将查找与操作同名的视图,在您的情况下为“Compare.cshtml”。
如果您将呼叫更改为return View("Index", model)
,则无论操作名称如何,您都将使用Index.cshtml视图。
那是你在找什么?
答案 1 :(得分:5)
MVC中的操作不需要相应的视图。它可以通过向View()
函数提供名称参数来返回任何视图 - 有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.view%28v=vs.98%29.aspx。
您可以在比较功能中执行所需的所有逻辑,并使用RedirectToAction()
重定向回索引操作或根据需要显示页面的任何其他操作。