Запрос в контроллере после отправки формы в ASPX с использованием действия MVC3 - PullRequest
1 голос
/ 20 января 2012

У меня есть следующий код в контроллере:

public ActionResult SearchPage() {

         return View();
      }

[HttpPost]
public ActionResult Search( string option, string text ) {
    // how to get request values-> and then I don't need the above parameters

    ViewData["Results"] = _some.Search(option, text); //option and text should be from Request
         return RedirectToAction( "SearchPage" );
}

и код поисковой страницы:

<form action="<%=Url.Action("Search","Persons")%>" method="post" name="search-form">

<select name="search-option" id="search-option">
<option value="category">Category</option>
<option value="discipline">Discipline</option>
<option value="manufacturer">Manufacturer</option>
</select>
<input type="text" name="keyword" id="keyword" />
<input type="submit" name="submit" id="submit" value="Search" />

</form>

<% if ( ViewData["Results"] != null ) {
      %>
         <p>Test</p>
      <%
   }
%>

Как получить отправленные значения (значение из selectbox и текст из входного текста) с помощью класса HttpRequest?

Спасибо

Ответы [ 3 ]

2 голосов
/ 20 января 2012

Много способов.

Заставьте ваш метод принимать параметр FormCollection:

public ActionResult SomeActionMethod(FormCollection formCollection)
{
    var key = formCollection["key"];

Или используйте связыватель модели по умолчанию и задайте параметры для каждого поля, которое вы хотите:

public ActionResult SomeActionMethod(string name)

Или

public ActionResult SomeActionMethod(Person person)

и по вашему мнению

<input name="Person.name" />

Или создайте свою собственную модель переплета.

Если вы хотите получить доступ к запросу, но если вы хотите пойти по этому пути - используйте FormCollection.

1 голос
/ 20 января 2012

С asp.net-mvc вам не нужно вручную извлекать значения из HttpRequest. Framework делает это автоматически, и это называется привязкой модели. В случае целочисленных значений, строк и других параметров простого типа, просто введите name html с теми же именами, что и их параметры в методе действия, вот и все. Именование для вложенных свойств и списков немного отличается.

<select name="option" id="option">
<option value="category">Category</option>
<option value="discipline">Discipline</option>
<option value="manufacturer">Manufacturer</option>
</select>
<input type="text" name="text" id="keyword" />

Теперь в действии опция и текст будут иметь значения.

1 голос
/ 20 января 2012

Во-первых, у вас должно быть что-то вроде

`<select name="searchOption" id="searchOption">`

и

`public ActionResult Search( string searchOption, string keyword) {`

Вы не можете использовать символ "-" в параметрах вашего представления, потому что вы не можете перевести его в автоматически сопоставленный параметр для вашего действия.

При этом, если вы не хотите использовать параметры действия для этого, вы можете использовать что-то вроде:

`Request.Params["search-option"]`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...