部分视图中的MVC Action Link

DLe*_*Leh 2 asp.net-mvc view actionlink

我是MVC的新手,试图弄清楚@Html.ActionLink部分视图中的工作方式.

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

Models
  PersonViewModel.cs
Views
  Addresses
    AddressListPartial.cshmtl
  Person
    Details.cshtml
Run Code Online (Sandbox Code Playgroud)

我创建了一个PersonViewModel,其中有FirstName,LastName和列表Address上课.我使用List脚手册为Address表创建了一个局部视图,并在我的视图中添加了以下内容,以便Person显示Person/Details页面上的地址列表:

@Html.Partial("~/Views/Address/AddressListPartial.cshtml", Model.Addresses)
Run Code Online (Sandbox Code Playgroud)

这是正确显示页面上的AddressList,但是,AddressList上的"创建","编辑"等链接是链接Views/Person/Edit/{id}而不是Views/Address/Edit/{id}.

部分视图操作链接:

@Html.ActionLink("Edit", "Edit", new { id=item.AddressID }) |
Run Code Online (Sandbox Code Playgroud)

因此,局部视图继承ActionLinkPerson而不是文件夹Address.有没有办法在局部视图中使这些ActionLinks引用地址文件夹/控制器而不是Person?

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

@Html.ActionLink("Edit", "../Address/Edit", new { id=item.AddressID }) |
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 6

当加载页面,你加载PersonPersonsController吧?我不认为它ActionLink真正关心它的部分视图,而是控制器动作呈现视图的内容.在呈现页面时解析URL的默认约定将返回到同一个控制器.

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

@Html.ActionLink("Edit", "Edit", "Address", new { id = item.AddressID }, null)
Run Code Online (Sandbox Code Playgroud)

(注意,最后还有一个额外的null参数.那个特殊的重载还包括一个HTML属性的对象.你没有使用它们,但是如果没有它就没有这种重载,所以你可以传递null给它.)