2013-11-09 4 views
0

Я пытаюсь поэкспериментировать с маршрутизацией и генерировать seo-friendly url для поиска.Несколько параметров маршрутизации с моделью представления в asp .net mvc

В настоящее время я ViewModel, как показано ниже:

public class SearchFormViewModel 
    { 
     //[Required(ErrorMessage="Keyword is required")] 
     public string Keyword { get; set; } 

     public IEnumerable<SelectListItem> TransactionTypes { get; set; } 
     public int TransactionTypeId { get; set; } 

     public IEnumerable<SelectListItem> RoomLookUps { get; set; } 
     public int? MinBeds { get; set; } 
     public int? MaxBeds { get; set; } 
     ... 
    } 

Когда эта форма получает представлен он идет к контроллеру:

public ActionResult SearchProperties(SearchFormViewModel viewModelInp) 
    { 
     // Perform search; 
    } 

и отображаются результаты поиска. Тем не менее, URL, который получает генерируется следующим образом:

http://localhost:49191/search/searchproperties?Keyword=London&TransactionTypeId=2&MinBeds=&MaxBeds=&MinPrice=&MaxPrice= 

Я требую URL, который выглядит как

http://localhost:49191/flats-to-rent/London?MinBeds=&MaxBeds=&MinPrice=&MaxPrice= 

Я не знаю, как передать параметры из ViewModel в пути

в следующий маршрут не работает:

routes.MapRouteLowercase(
       "Search-Properties-Buy", 
       "flats-to-rent/{Keyword}", 
       new { controller = "Search", action = "SearchProperties", Keyword = UrlParameter.Optional }, 
       new { TransactionTypeId = "2" } 
      ); 

Я пробовал различные другие вещи, e, похоже, работает, и я получаю ошибку 404.

Я не могу найти ни одного примера, который мог бы мне помочь.

+0

При отправке данные формы сериализуются и отправляются на сервер. В этом случае вы не используете ASP.NET MVC Routing. Ваш URL-адрес правильный, но никогда не работает с данными клиента. Я полагаю, что «URL-адрес, который генерируется, следующий» генерируется после нажатия кнопки отправки. –

+0

Вы правы. Есть ли способ создать требуемый URL? – Tripping

+0

Вам необходимо переопределить, на стороне клиента, нажать кнопку отправки кнопки отправки и создать строку, которая должна быть отправлена. Другого способа это не сделать. Дайте мне знать, вы делаете запрос POST или GET на сервер? –

ответ

1

Ну, я пытаюсь дать вам решение. Место поле ввода, которое содержит базовый маршрут, порожденную ASP.NET MVC:

<input type="hidden" value="@Url.Action("SearchProperties", new { Keyword = "{Prototype}" })" id="BaseSearchURL" /> 

Как вы можете видеть, я указан ключевое слово с «{} Prototype» значение, это проинструктировать asp.net MVC для обеспечить настроенный пользовательский маршрут, и, после рендеринга, в страницу HTML, вы должны увидеть что-то вроде этого:

<input type="hidden" value="server/flats-to-rent/{Prototype}" id="BaseSearchURL" /> 

после, вы можете использовать JQuery для переопределения представить кнопку нажатой событие, и вы можете написать пользовательский код:

$(document).ready(function() { 
    $('input[type=submit]').submit(function() { 
     var baseURL = $('#BaseSearchURL').val(); 
     var keyword = $('input[name=Keyword]'); 
     var action = baseURL.replace('{Prototype}', keyword); 
     var form = $(this).parents('form'); 
     // Get all parameter except Keyword 
     var params = $('input[name!=Keyword], select, textarea', form).serialize(); 
     action += "?" + params; 
     document.location = action; 
    }); 
}); 

шаги просты:

  • Получить маршрутизацию формы шаблона предыдущей сгенерированный
  • Получить ключевое слово, которое должно быть replaceted к "{Prototype}";
  • Получить параметры формы и добавить их к действию
  • Вызвать document.location для запуска определенного URL-адреса.
Смежные вопросы