ASP.NET MVC Routing, Html.BeginForm - PullRequest
4 голосов
/ 07 мая 2011
<% 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 Ответ

3 голосов
/ 07 мая 2011

Это происходит потому, что «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();
});
...