2009-12-09 81 views
0

我使用ASP.NET ADN在我看来,下面的代码:从HTTP获取表单值?

<% using(Html.BeginForm("Search", "Home", FormMethod.Get)) { %> 

<%= Html.TextBox("searchText") %> 
<input type="submit" value="Search" /> 

<% } %> 

,并在我的控制,我有:

public ActionResult Search(string searchText) 
    { 
     return View("Index"); 
    } 

如果我在搜索行动断点,检查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

你在global.asax中有一些非默认路由设置吗?还要检查浏览器中生成的页面的来源。 – PanJanek 2009-12-09 14:39:54

+0

我已经设置了以下路线: routes.MapRoute( “搜索”,//路线名称 “搜索/ {} SEARCHTEXT”,// URL与参数 新{控制器= “家”,行动=“搜索“,searchText =”“} //参数默认值 ); – 2009-12-09 14:51:29

回答

2

使用Firebug或Fiddler查看实际的URI。你的路线中有一个“searchText”部分,我敢打赌你也有一个“searchText”查询字符串参数。

要使searchText成为URI路径部分的一部分,您需要使用JavaScript来重写表单的URI,因为HTML表单不知道您的MVC路由。另一方面,HTML表单做“查询字符串”的查询字符串参数,并且MVC将它们绑定到动作参数,甚至不包括它们在路由中。

最简单的解决方案是从您的路由中删除searchText,并使用查询字符串参数。您不需要做任何事情,只需更改路线即可完成此项工作。