从HTTP-get获取表单值?

时间:2009-12-09 14:33:07

标签: asp.net-mvc forms http-get

我正在使用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 =“”)的默认值时,我的动作中得到了正确的值。为什么呢?

1 个答案:

答案 0 :(得分:2)

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

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

最简单的解决方案是从您的路由中完全删除searchText,然后使用查询字符串参数。您不需要做任何事情,只需更改路线即可实现此功能。