ASP.NET MVC2 и чистые URL для запросов GET - PullRequest
1 голос
/ 21 июля 2010

У меня очень простая форма:

<% Html.BeginForm("Listing", "Home", Nothing, FormMethod.Get) %>
<%= Html.TextBox("id")%>
<%= Html.TextBox("id2")%>
<input type="submit" value="Submit" />
<% Html.EndForm()%>

Это создаст форму с двумя полями ввода.Если я введу 'test1' и 'test2' как текст и отправлю форму, конечный результат будет:

http:// localhost/Home/Listing?id=test1&id2=test2

Есть ли способ настроить инфраструктуру MVC2 так, чтобы конечный результат мог быть таким:

http://localhost/Home/Listing/test1/test2

Конечно, альтернативы могут либо написать небольшой Javascript для перехвата отправки формы, создать URL и перенаправить пользователя на стороне клиента, либо вместо этого выполнить POST, создать URL изатем перенаправьте пользователя на сервер.

Ответы [ 2 ]

3 голосов
/ 21 июля 2010

Лично я бы следовал схеме PRG здесь.

Пользователи заполняют вашу форму, которая затем POST возвращается на сервер, вы выполняете любые операции с нужными вам данными и затем перенаправляете пользователя через GET в соответствующее место (перенаправление на действие, маршрут и т.д.).

Это имеет несколько преимуществ для вас. Первое и наиболее очевидное состоит в том, что теперь пользователь может обновить свою целевую страницу и т. Д. Без ужасного сообщения «Обновление этой страницы приведет к публикации на сервере».

Вторым преимуществом для вас является то, что теперь вы можете перенаправить своего пользователя на URL, который вы предпочитаете. В вашем случае вы создадите URL, который вы будете перенаправлять, а затем отправите их по пути. т.е. http://localhost/Home/Listing/test1/test2

0 голосов
/ 21 июля 2010

Прежде всего, если вы используете формы MVC, чем использовать

<%= Html.DisplayFor(m => m.Id2) %>

вместо их ручного рисования.значения в URL.они либо помещают его в POST (переменные заголовка), либо в GET (строки запроса).поэтому, если вам нужно поведение, вы должны выполнить Javascript самостоятельно.

и, кстати, это работает, только если ваш маршрут принимает значение.

context.MapRoute("{controller}/{action}/{id}/{id2}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...