2015-11-24 5 views
1

Я пытаюсь получить красивый URL-адрес из Html.ActionLink, но вместо этого получаю версию с запросом. У меня есть определенный маршрут, который отлично работает, когда я ввожу значения, которые должны быть в навигационную панель в моем браузере, и в конечном итоге получаю представления и нажимаю на действия контроллера, которые, я думаю, я бы сделал.Html.ActionLink не работает как ожидается

Мое определение маршрута:

routes.MapPageRoute(
    "WebFormDefault", 
    "", 
    "~/Login.aspx" 
    ); 

routes.MapRoute(
    "MvcDefault", 
    "{controller}/{action}/{id}", 
    new {controller = "Foo", action = "Index", id = UrlParameter.Optional} 
    ); 

Мой помощник вызов разметки:

<ul> 
    <li>@Html.ActionLink("Foo Link", "FooAction", "Foo")</li> 
</ul> 

Фактический результат:

<a href="/?action=FooAction&amp;controller=Foo">Foo Link</a> 

Мои ожидания:

<a href="/Foo/FooAction">Foo Link</a> 

Я попытался запустить новый проект за пределами текущего, который является существующим приложением, и увидел ожидаемый результат. Я добавил MVC вручную в проект, поскольку это приложение веб-форм изначально. Это гибридизация сортов, и я не уверен, что это вызывает проблему. Я использовал nuget для сборки MVC-сборок и зависимостей и самостоятельно настраивал конфигурацию на основе вывода в VS из шаблона «Новый проект ...». Я не вижу разницы между ними в отношении конфигураций за пределами моего включения нашего корневого пространства имен, поэтому я могу использовать мои существующие типы. Однако я не знаю, есть ли что-то еще, что мне нужно сделать. Однако это сбивает с толку, потому что MVC ведет себя в гибридной среде, в противном случае точно так же, как я ожидал бы этого.

+1

Вы пробовали отлаживать маршруты, используя что-то вроде Glimpse, чтобы убедиться, что ваши маршруты сопоставляются, как вы ожидаете? –

+0

Я совсем забыл о проблеске. Я посмотрю, что он должен сказать. – Bigsby

+0

Я думаю, вам нужно сначала просмотреть это ниже URL: http://stackoverflow.com/questions/22914859/mvc5-actionlink-pass-data-as-query-string –

ответ

1

Добавить маршрут mvc до веб-формы. Надеюсь, это сработает.

routes.MapRoute(
    "MvcDefault", 
    "{controller}/{action}/{id}", 
    new {controller = "Foo", action = "Index", id = UrlParameter.Optional} 
); 

routes.MapPageRoute(
    "WebFormDefault", 
    "", 
    "~/Login.aspx" 
); 
+0

Я не знаю, почему заказ имеет значение, но он работал. Я бы подумал, что MapRoute против MapPageRoute и вызов ActionLink, определяющий контроллеры и действия, будут видеть соответствующий маршрут, но, по-видимому, нет. – Bigsby

+0

В случае многократного маршрута первый маршрут, который полностью удовлетворен, будет работать. – Azim

+0

Я получаю это. Я бы предположил, что среда выполнения разделила бы «явно маршруты MVC» и «явно веб-маршруты». Кажется, это одна из тех вещей, которые должны быть для меня особенностью. – Bigsby

0
//To get this : <a href="/Foo/FooActionMethodName">Foo Link Text</a> 

//Your action link should be 
<ul> 
    <li>@Html.ActionLink("Foo Link Text", "FooActionMethodName", "FooController")</li> 
</ul> 

//Your controller should be 
public class FooController 
{ 
publics ActionResult FooActionMethodName() 
{ 

    return View(); 
} 
} 
Смежные вопросы