【问题标题】:MVC Action Link in partial view局部视图中的 MVC 操作链接
【发布时间】: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 }) |

【问题讨论】:

    标签: asp.net-mvc view actionlink


    【解决方案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 传递给它.)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多