我在控制器中有以下代码:
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" );
}
和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>
<%
}
%>
如何使用HttpRequest类获取提交的值(selectbox中的值和输入文本中的文本)?
由于
答案 0 :(得分:2)
很多方式。
使您的方法采用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 :(得分:1)
首先,你应该有像
这样的东西`<select name="searchOption" id="searchOption">`
和
`public ActionResult Search( string searchOption, string keyword) {`
您不能在视图的参数中使用字符“ - ”,因为您无法在自动映射的参数中将其转换为您的操作。
话虽这么说,如果你不想为这个使用动作参数,你可以使用类似的东西:
`Request.Params["search-option"]`
答案 2 :(得分:1)
使用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" />
现在,在操作中,选项和文本将具有值。