Действие ссылки отправляет идентификатор в другую область? - PullRequest
0 голосов
/ 24 марта 2011

Скажем, у вас есть две области (Area1 и Area2) с маршрутизацией по умолчанию.Каждая из этих областей имеет контроллер Home.

Допустим, у вас есть две области (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.Зачем?И как мне заставить его не передавать этот идентификатор во вторую область?

Спасибо за любой совет по этому вопросу, его поставили в тупик на несколько дней.

Ответы [ 2 ]

0 голосов
/ 25 марта 2011

Вот решение, которое я использовал.Он позволяет вам указывать область, не пропуская вручную 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
0 голосов
/ 24 марта 2011

попробуйте это ...

@Html.ActionLink("Goto Area1", "Index", New With {.area = "Area1", .id="" })
...