Генерация URL через маршрутизацию, используя ID из поля формы (ASP.NET MVC) - PullRequest
0 голосов
/ 15 января 2010

Скажите, что я хочу отобразить данные пользователя примерно так: http://www.mysite.com/user/1

Я настроил маршрут так:

routes.MapRoute("UserDetails", "user/"{id}",
    new { controller = "User", action = "Details" });

Тогда мой контроллер:

public ActionResult Details(int id)
{
    User currentUser = _userRepository.GetUser(id);
    if (currentUser == null) return View("NotFound");
    return View(currentUser);
}

Пока все хорошо. Все работает как я ожидаю. Теперь мне также нужна форма, в которой можно ввести идентификатор для поиска и нажать «Отправить», чтобы получить тот же результат. например:

<% Html.BeginForm("Details","User",FormMethod.Post); %>
<input type="text" value="" name="id" id="userid" />
<%= Html.Button("Search For User","submit","searchforuser"; %>
<% Html.EndForm(); %>

Это то место, где я сейчас потерялся. Я не хочу просто иметь [AcceptVerbs (HttpVerbs.Post)] и использовать RedirectToAction, если это возможно. Я просто хочу взять любое число, которое они введут - скажем, 38 - и перейти на www.mysite.com/user/38

Возможно ли это даже с прямым MVC? Я уверен, что есть способы, связанные с jQuery, но до сих пор не получалось получить что-то кроме базового работающего оповещения jQuery, поэтому на самом деле не хочу тратить на это больше времени.

1 Ответ

1 голос
/ 15 января 2010

MVC автоматически сопоставляет параметры запроса имени (для GET) или формирует входные файлы (для POST) с параметрами действия по имени. К сожалению, ваш идентификатор не соответствует имени параметра действия, поэтому MVC не может соответствовать им. Чтобы это исправить, вы можете:

  • изменить идентификатор на <input type="text" value="" name="id" id="userid" /> с userid на id
  • изменить имя параметра действия Подробности с id на userid (и не забудьте также обновить свой маршрут)

Я только что подтвердил, что, по крайней мере, первое исправляет проблему с MVC2 RC. У меня нет MVC1, поэтому я не могу проверить, работает ли он там также, но, насколько я знаю, нет серьезных различий в том, как MVC1 и MVC2 соответствуют параметрам.

...