#c# #asp.net-mvc #asp.net-mvc-3 #asp.net-mvc-routing
#c# #asp.net-mvc #asp.net-mvc-3 #asp.net-mvc-маршрутизация
Вопрос:
<% using (Html.BeginForm("SearchByZip", "Dealer", new { zip = ""}, FormMethod.Get))
{ %>
<div>
<input type="text" class="padLeft" name="Zip" id="Zip" style="width: 200px" />
<input type="submit" class="btnFind" value="Find" />
</div>
<% } %>
Это дает мне URL «Dealer / SearchByZip?Zip = 12345»
Я хотел бы закончить этим: «Dealer / Zip / 12345»
(если я вручную введу URL-адрес «Dealer / Zip / 12345», он вернет правильные результаты, но когда я нажимаю «Отправить», появляется «Dealer / SearchByZip? Zip = 12345»
Чего я не понимаю?
routes.MapRoute(
"DealerSearchByZip",
"Search/Zip/{zip}",
new { Controller = "Dealer", action = "SearchByZip", zip = "" }
);
Ответ №1:
Это происходит потому, что «Zip» — это поле ввода в вашей форме, а не данные маршрута. Итак, при визуализации страницы создается URL-адрес с использованием маршрута по умолчанию (маршрут «DealerSearchByZip» не был сопоставлен, поскольку Zip не был указан в качестве данных маршрута).
Вы могли бы выполнить это с помощью javascript, обновив атрибут «action» в форме при обновлении поля «zip». Пример использования jQuery:
$('input[name=Zip]').update(function(){
$('form').attr('action', 'Dealer/Zip/' $(this).val());
});
Или, поскольку Zip — это единственное значение, о котором вы беспокоитесь,
$('form').submit(function(){
window.location = 'Dealer/Zip/' $('input[name=Zip]').val();
});