2009-04-27 2 views
3

У меня есть URL-адрес:ASP.NET MVC: Форма ввода любуйтесь URL-

Пересылка/Поиск/{SearchType}/{} searchValue

и действие контроллера:

// ShipmentSearchType is an enum ... PartNumber, CustomerOrder, etc... 
ActionResult Search(ShipmentSearchType searchType, string searchValue) 

Так это означает, что я могу набрать довольно URLs как:

Пересылка/Поиск/PartNumber/Widget-01

Г.Е. t список всех отправок с этим номером детали.

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

Пересылка/Поиск/PartNumber/{пользовательского ввода-из-текстовое поле}

К сожалению, я не могу иметь форму добраться до выше URL - он должен быть сформирован на стороне сервера , Поэтому вместо этого у меня будет сообщение формы обратно в Shipment/Search/PartNumber с {user-input} в качестве значения запроса на отправку.

Так что я в конечном итоге с:

[AcceptVerbs(HttpVerbs.Post)] 
ActionResult Search(ShipmentSearchType searchType, string searchValue, bool? post) 
{ 
    return RedirectToAction("Search", new { searchType = searchType, searchValue = searchValue}); 
} 

2 вещи:

1) Есть ли способ я могу получить вокруг имея метод пост Поиск без использования JavaScript на стороне клиента?

2) Bool? значение post есть только для того, чтобы иметь разные подписи. Это явно некрасиво. Есть ли более разумный способ сделать это?

Спасибо!

редактировать:

«К сожалению, я не думаю, что я могу сделать это из формы (без JavaScript, по крайней мере).» & «Есть ли способ, которым я могу обойтись без публикации javascript?»

Это было немного неоднозначно. Я имею в виду, что я не думаю, что у меня может быть форма генерации url/Shipment/Search/PartNumber/{value-from-textbox} и получить ее для метода формы get. Я думаю, что это было бы просто сделать в javascript (переопределить действие отправки для динамического создания URL-адреса), но я этого не сделал. Я не имел в виду, что javascript необходим для публикации.

+0

Я не вижу причины, почему вы не можете сделать это без javascript. Не могли бы вы объяснить, почему вы думаете, что не можете? –

ответ

6

у меня такая же ситуация, но она отлично работает без JavaScript, я просто получить FormCollections в [пост] Поиск, а затем перенаправить к действию, как это:

[AcceptVerbs(HttpVerbs.Post)] 
ActionResult Search(FormCollection form) 
{ return RedirectToAction("Search", new { searchType = form["searchType"], searchValue = form["searchValue"]}); } 

Я думаю, что это хорошее решение, потому что я смотрел видео о Post-Redirect-Получить шаблон, который - хорошая практика в приложениях asp.net mvc.

+0

У вас есть URL-адрес видео? –

+0

Описание шаблона вы можете найти здесь http://en.wikipedia.org/wiki/Post/Redirect/Get видео http://videos.visitmix.com/MIX09/T44F это не про образец, но Фил Хаак сказал об этом Вот. –

+0

Думаю, я не вижу в этом решения.Все, что вы делаете, - это запутывание подписи метода для использования коллекции форм, но делает то же самое, что и: ActionResult Search (ShipmentSearchType searchType, string searchValue) Это совсем другая работа, поскольку они не могут иметь идентичные подписи для метода Get и Post. Мой вопрос (который в конечном итоге запутывался!) Был, если бы был способ получить Get и Post с той же подписью, не искусственно дифференцируя их. Я могу заставить его работать (и это так), я просто нахожу его вонючим. – anonymous