我是MVC的新手,试图了解@Html.ActionLink
在部分视图中的工作方式。
背景 - 这里是解决方案的相关部分
Models
PersonViewModel.cs
Views
Addresses
AddressListPartial.cshmtl
Person
Details.cshtml
我创建了一个PersonViewModel,其中包含FirstName
,LastName
和Address
列表。我使用地址表的List脚手架创建了一个局部视图,并在我的视图中添加了以下内容,以便人员在Person/Details
页面上显示地址列表:
@Html.Partial("~/Views/Address/AddressListPartial.cshtml", Model.Addresses)
这是正确显示页面上的AddressList,但是,地址列表上的"创建",#34;编辑"等等链接链接到Views/Person/Edit/{id}
而不是Views/Address/Edit/{id}
。
部分查看操作链接:
@Html.ActionLink("Edit", "Edit", new { id=item.AddressID }) |
因此,部分视图继承ActionLink
的{{1}}文件夹,而不是Person
。有没有办法在局部视图中使这些ActionLinks引用地址文件夹/控制器而不是Person?
我尝试了这个,但是如果局部视图不在Views文件夹的子文件夹中,那么这不会起作用:
Address
答案 0 :(得分:6)
加载页面时,您是否正在从Person
加载PersonsController
?我不认为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
传递给它。)