0

我正在使用 ASP.NET 并在我的视图中有以下代码:

<% 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="") 的默认值时,我在操作中得到了正确的值。为什么?

4

1 回答 1

2

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

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

最简单的解决方案是从您的路线中完全删除 searchText 并仅使用查询字符串参数。您无需执行任何操作,只需更改路线即可。

于 2009-12-09T15:25:32.787 回答