我正在使用ASP.NET adn在我的视图中有以下代码:
<% using(Html.BeginForm("Search", "Home", FormMethod.Get)) { %>
<%= Html.TextBox("searchText") %>
<input type="submit" value="Search" />
<% } %>
在我的控制器里我有:
public ActionResult Search(string searchText)
{
return View("Index");
}
如果我在Search-action中有一个断点并检查searchText参数,即使我在texbox中键入一些文本,它也总是“”。如果我将formmethod更改为POST,它将按预期工作。
使用http-GET时如何阅读“searchText”?
修改
我有以下路线
routes.MapRoute(
"Search", // Route name
"Search/{searchText}", // URL with parameters
new { controller = "Home", action = "Search", searchText ="" } // Parameter defaults
);
当我删除了searchText(searchValue =“”)的默认值时,我的动作中得到了正确的值。为什么呢?
答案 0 :(得分:2)
使用Firebug或Fiddler查看实际的URI。你的路线有一个“searchText”部分,我打赌你也有一个“searchText”查询字符串参数。
要使searchText成为URI路径部分的一部分,您需要使用JavaScript来重写表单的URI,因为HTML表单不了解您的MVC路由。另一方面,HTML表单会“开箱即用”查询字符串参数,MVC会将它们绑定到操作参数,甚至不包括在路径中。
最简单的解决方案是从您的路由中完全删除searchText,然后使用查询字符串参数。您不需要做任何事情,只需更改路线即可实现此功能。