MVC Маршрут Странность - PullRequest
3 голосов
/ 19 февраля 2011

Привет всем, новенький в asp.net mvc, и я создаю фальшивый социальный сайт (для учебных целей), собирая стандартный шаблон mvc ... Я добавил несколько представлений и т. Д., Которые все отлично работают. Тем не менее, теперь я добавил область mvc под названием «Блог» и добавил ссылку в главное меню. Теперь, если я нажимаю на любой из пунктов меню, все работает как положено - однако, когда я нажимаю на элемент меню «Блог», представление и т. Д. Показывают страницу блога, однако ссылки меню для других представлений имеют / Blog / впереди. URL сейчас !? Не уверен, что я делаю что-то не так ... вот мой код меню:

<div id="menucontainer">
                <ul id="menu">
                    @* @Html.ActionLink() Params = String Name, String Controller Name,
                    string Method (actionLink) Name *@
                    <li>@Html.ActionLink("Home", "Index", "Home")</li>
                    <li>@Html.ActionLink("Mail", "Index", "Mail")</li>
                    <li>@Html.ActionLink("Search", "Index", "Search")</li>
                    <li>@Html.ActionLink("Dating", "Index", "Dating")</li>
                    <li>@Html.ActionLink("Groups", "Index", "Groups")</li>
                    <li>@Html.ActionLink("Forums", "Index", "Board")</li>
                    <li>@Html.ActionLink("Blog", "Index", "Blog")</li>
                    <li>@Html.ActionLink("About", "About", "Home")</li>
                </ul>
            </div>

Ответы [ 2 ]

3 голосов
/ 19 февраля 2011

Если блог находится в отдельной области от других, MVC ожидает, что ссылки из этой области будут находиться в той же области, поэтому он добавляет эту область к вашему URL-адресу.Если они находятся в другой области, вам нужно вызвать ActionLink со значением маршрута «Площадь».Например, если «Знакомства» находится в разделе «Социальные сети», вы можете использовать:

@Html.ActionLink("Dating", "Index", new { controller = "Dating", area = "Social" } );

Вот соответствующее обсуждение от Что нового в ASP.NET MVC 2 :

«Область» теперь является зарезервированным ключом значения маршрута

Строка «область» в значениях маршрута теперь имеет особое значение в ASP.NET MVC,так же, как это делают «контролер» и «действие».Одним из следствий этого является то, что если HTML-помощники снабжены словарем значений маршрута, содержащим «область», помощники больше не будут добавлять «область» в строку запроса.

Если вы используете функцию областей, убедитесь, чтоне использовать {область} как часть URL вашего маршрута.

1 голос
/ 19 февраля 2011

Принимает неопределенные значения из текущего контекста.Например, @Html.ActionLink("Test", "Test") создаст ссылку относительно контроллера.Так, например, если вы отобразите это на Foo контроллере, он отобразит элемент <a href="/Foo/Test">Test</a>.То же самое касается области - если вы хотите статическую связь между областями, вам нужно будет определить, к какой области она должна вас направлять.Пример: @Html.ActionLink("Test", "Test", "Foo", new { @area = string.Empty }, null) всегда будет ссылаться на контроллер Foo действие Test без области.

...