2

在我开始捏造我自己的方法之前,我正在把头发拉出来,我正在寻找指导。

这是我所拥有的:

查看片段

<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 并用新比较的产品返回它,所以我可以从我的原始视图中做到这一点:

@foreach(var products in Model.ComparedProducts)

我能看到我这样做的唯一方法是“捏造”:

public ActionResult Index(int productId = 0, bool compare)
{

}

如果同一页面上有很多功能,这可能会变得不守规矩。

当然,我在这里缺少一些明显的东西吗?

哦,AjaxLink 选项不适合我,因为这是必须通过回发(Progress Enhancement 和所有爵士乐)工作的网站的一部分。

4

2 回答 2

9

我认为您通过调用返回 ActionResult return View(model),对吗?如果没有明确命名视图,MVC 解析机制会查找与操作同名的视图,在您的情况下为“Compare.cshtml”。

如果您更改对您的调用,return View("Index", model)无论操作名称如何,您都将使用 Index.cshtml 视图。

那是你要找的吗?

于 2012-11-23T10:11:26.373 回答
5

MVC 中的操作不需要对应的 View。它可以通过向View()函数提供名称参数来返回任何视图 - 请参阅http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.view%28v=vs.98%29.aspx详情。

您可以在比较函数中执行所有需要的逻辑并重定向回索引操作或根据需要使用显示页面的任何其他操作RedirectToAction()

于 2012-11-23T10:11:11.090 回答