局部视图中的 MVC 操作链接

Posted

技术标签:

【中文标题】局部视图中的 MVC 操作链接【英文标题】:MVC Action Link in partial view 【发布时间】:2014-06-25 15:01:36 【问题描述】:

我是 MVC 的新手,试图弄清楚 @html.ActionLinks 在局部视图中的工作方式。

背景-这是解决方案的相关部分

Models
  PersonViewModel.cs
Views
  Addresses
    AddressListPartial.cshmtl
  Person
    Details.cshtml

我创建了一个 PersonViewModel,它有 FirstNameLastNameAddresses 列表。我使用 List 脚手架为 Address 表创建了一个局部视图,并将以下内容添加到我的 Person 视图中,以在 Person/Details 页面上显示地址列表:

@Html.Partial("~/Views/Address/AddressListPartial.cshtml", Model.Addresses)

这在页面上正确显示了地址列表,但是地址列表上的“创建”、“编辑”等链接链接到 Views/Person/Edit/id 而不是 Views/Address/Edit/id

部分视图操作链接:

@Html.ActionLink("Edit", "Edit", new  id=item.AddressID ) |

因此,部分视图继承了PersonActionLink 文件夹,而不是Address。有没有办法让局部视图中的这些 ActionLinks 引用地址文件夹/控制器而不是 Person?

我试过了,但是如果局部视图不在 Views 文件夹的子文件夹中,这将不起作用:

@Html.ActionLink("Edit", "../Address/Edit", new  id=item.AddressID ) |

【问题讨论】:

【参考方案1】:

当您加载页面时,您是否正在从PersonsController 加载Person?我认为ActionLink 并不真正关心它所在的部分视图,而是控制器操作呈现了视图。渲染页面时解析 URL 的默认约定将返回到同一个控制器。

您可以覆盖该默认值并使用ActionLink 的重载之一显式指定控制器:

@Html.ActionLink("Edit", "Edit", "Address", new  id = item.AddressID , null)

(请注意,最后还有一个额外的 null 参数。该特定重载还包括 HTML 属性的对象。您没有使用这些,但 there's no overload of this kind without it 所以您可以将 null 传递给它.)

【讨论】:

以上是关于局部视图中的 MVC 操作链接的主要内容,如果未能解决你的问题,请参考以下文章

从asp.net mvc的部分视图中的文本框中获取值

如何将参数传递给 ASP.NET MVC 中的局部视图?

如何在 Asp.Net MVC4 Razpr 视图中将操作链接作为图像?

MVC 3 中的视图和局部视图有啥区别?

mvc中的异步页面加载

如何确定视图中动作的上下文(asp.net mvc)