2014-12-17 7 views
1

У меня есть приложение ASP.NET MVC, где я хочу, чтобы действие контроллера Home\Index принимало необязательный параметр, который будет использоваться сервером для принятия решения о том, какой вид будет возвращен.По умолчанию маршрут не захватывает строку запроса

Так я определил следующие маршруты:

routes.MapRoute(
    name: "LogOn", 
    url: "logon/{id}", 
    defaults: new {controller = "Home", action = "LogOn", id = UrlParameter.Optional} 
); 
routes.MapRoute(
    name: "register", 
    url: "register/{id}", 
    defaults: new {controller = "Home", action = "Register", id = UrlParameter.Optional} 
);  
routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new {controller = "Home", action = "Index", id = UrlParameter.Optional} 
    ); 

Эти маршруты позволяют мне упростить мой URL, не имея, чтобы указать контроллер Home так URL, как mysite/Home/logon упрощены до mysite/logon .The Home/Index действия, где все не являющиеся разрешенные URLs идти, выглядит так:

public ActionResult Index(string id="") 
{ 
    if (id.Contains("App")) 
     return View("AppView") 
    return View(); 
} 

ПРОБЛЕМА

Когда я пришлю localhost/#app/41 на свой сервер, ожидаю, что id будет #app/41, но это не так. Значение id всегда равно null.

Есть что-то неправильное/отсутствующее в моем определении пути?

+1

Вы имеете в виду '#' или '?' ... – haim770

ответ

3

Вы не можете использовать Fragement identifier в качестве некоторого значения строки запроса, так как Идентификатор фрагмента вообще не отправляется на сервер, он используется только браузером (в основном для Anchor links).

Если вы настаиваете на использовании #, вам придется сначала закодировать его, но это будет выглядеть не так красиво, как вы ожидаете.

+0

О, это объясняет это! Спасибо. Я сделаю еще несколько настроек и посмотрю, смогу ли я найти способ обойти это. – GETah

1

# не является символом строки принятого запроса. Если вы хотите передать # в качестве параметра строки запроса, вы должны закодировать его до %23. Ваш правильный URL должен выглядеть примерно так:

localhost/?id=%23app/41 
+0

О, это объясняет! Спасибо. Позвольте мне сделать некоторые настройки и посмотреть, смогу ли я обойти это. – GETah