假设您有两个区域(Area1
和Area2
)并使用默认路由。每个区域都有一个家庭控制器。
假设您有两个区域(Area1
和Area2
),并且具有默认的区域感知路由。这些区域中的每一个都有一个带有索引的Home控制器。在Area1
的主页/索引视图中,您输入:
@Html.ActionLink("Goto Area2", "Index", New With {.area = "Area2"})
并在Area2的主页/索引视图中输入:
@Html.ActionLink("Goto Area1", "Index", New With {.area = "Area1"})
现在出现问题:如果您转到/Area1/Home/Index/1
,则操作链接会尝试将您转到/Area2/Home/Index/1
。为什么?如何让它不将该ID传递给第二个区域?
感谢您对此事的任何建议,它已经被困了几天。
答案 0 :(得分:0)
试试这个......
@Html.ActionLink("Goto Area1", "Index", New With {.area = "Area1", .id="" })
答案 1 :(得分:0)
继承我使用的解决方案。它允许您指定一个区域而无需手动传递ReouteValue,重要的是它会自动忽略您未指定的路径值。这可能(也可能确实)有错误,因此在使用它时要小心。
Private ReadOnly ValuesToIgnore As String() = New String() {"action", "controller"}
<Extension()> _
Public Function AreaActionLink(ByVal htmlHelper As HtmlHelper,
ByVal linkText As String, Optional actionName As String = Nothing,
Optional controllerName As String = Nothing,
Optional ByVal areaName As String = Nothing,
Optional ByVal routeValues As Object = Nothing,
Optional htmlAttributes As Object = Nothing) As MvcHtmlString
Dim rvs = If(routeValues IsNot Nothing, New RouteValueDictionary(routeValues), New RouteValueDictionary())
Dim values = htmlHelper.ViewContext.RouteData.Values
If Not String.IsNullOrEmpty(areaName) Then _
rvs("area") = areaName
Dim implicitValues = values.Keys.Except(rvs.Keys)
For Each key In implicitValues.Except(ValuesToIgnore)
rvs(key) = Nothing
Next
Return htmlHelper.ActionLink(
linkText,
actionName,
controllerName,
rvs,
htmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)
)
End Function