动作链接将Id发送到不同的区域?

时间:2011-03-24 19:00:45

标签: asp.net-mvc asp.net-mvc-routing

假设您有两个区域(Area1Area2)并使用默认路由。每个区域都有一个家庭控制器。

假设您有两个区域(Area1Area2),并且具有默认的区域感知路由。这些区域中的每一个都有一个带有索引的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传递给第二个区域?

感谢您对此事的任何建议,它已经被困了几天。

2 个答案:

答案 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