2009-12-21 3 views
1

я в настоящее время есть набор маршрутов, какmvc.net форма перенаправлении добраться до 'хороший' URL лучший подход

{контроллер}/{действие}/{от}/{к}/{некоторые}/{другое }/{things}
{controller}/{action}/{from}/{to}/{some}/{other}
{controller}/{action}/{from}/{to}
{ контроллер}/{действие}

и представления с формами с получением действий для получения результатов. Но действия get идут на по умолчанию/последний маршрут с параметрами в строках запроса. Каков наилучший подход для обработки перенаправления на симпатичный URL-адрес для конкретного маршрута? т.е. когда форма представляет идет в myurl.com/controller/action?from=20091021&to=20091131 ИТС перенаправлены myurl.com/controller/action/from-20091021/to-20091131

Вообще, мне интересно, если я просто отсутствует нечто фундаментальное о разумном проектировании маршрута, поскольку я также небольшие проблемы с Html .RouteLink для маршрутизации, а не URL-адреса стиля строки запроса.

Заранее благодарим за любые советы/рекомендации/полезные ссылки.

ответ

3

Форма всегда будет кодировать параметры в виде строки запроса. Если вы хотите, чтобы клиент выдал довольно url GET, вам нужно пойти с обработчиком отправки, чем конструировать URL-адрес на стороне клиента. Если это нормально, вам нужно провести дополнительную поездку туда-обратно, а затем подумайте об использовании POST и получите действие, которое принимает POST, и восстанавливает URL-адрес и выполняет RedirectToAction для действия, которое принимает значения через GET.

стороне клиента:

$(function() { 
    $('form').submit(function() { 
     var params = [ $('from').val(), $('to').val(), ... ]; 
     location.href = $(this).attr('action') + '/' + params.join('/'); 
     return false; 
    }); 
$); 

Серверный

[AcceptVerbs(HttpVerbs.Post)] 
[ActionName("MyAction")] 
public ActionResult MyPostAction(string from, string to, ...) 
{ 
    // you may be able to simply reuse the RouteValueDictionary, but may 
    // also need some transformations... 
    return RedirectToAction("MyAction", new { from = from, to = to, ... }); 
} 

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult MyAction(string from, string to, ...) 
{ 
    ... 
} 
0

Aha! Я думаю, что нашел свою проблему с вещами на основе маршрутов, не возвращающими маршрут, который я ожидал, - я указал параметры по умолчанию для слишком большого количества маршрутов, а это означало, что маршрут по умолчанию (последний) всегда совпадал - и каждый параметр закончился в строке запроса.

Смежные вопросы