无法将我的输入参数路由到我的控制器操作方法

时间:2014-05-28 03:36:02

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-controller

我无法将文本框数据传递给控制器​​操作参数。

我正试图让网址看起来像:

http://localhost:51124/gifts?searchTerm=test

但是当我在文本框中输入文本时,我得到一个看起来像的网址:

http://localhost:51124/gifts

以下是我对该路线的代码:

 routes.MapRoute("Gifts",
            "gifts",
            new { controller = "Gifts", action = "Search" });

这里是带有文本框和按钮的页面代码,用于提交文本框数据:

<form method="GET">
     <input type="search" name="searchTerm"/>
     <input type="button" value="Search By Category" onclick="location.href='@Url.Action("Search", "Gifts")'" />
</form>

这里是我试图将数据传递给失败的控制器的代码:

public ActionResult Search(string searchTerm = null)
    {
        var model = db.Gifts.ToList();
        return View(model);
    }

“searchTerm”永远不会获取我传入文本框的任何参数。它总是空的。

2 个答案:

答案 0 :(得分:3)

使用输入(即搜索框)在视图中创建一个表单元素,该输入具有与参数匹配的名称属性和提交按钮。

@using (Html.BeginForm("Search", "Gifts") {
  <input type='text' name='searchTerm' value='' />
  <input type='submit' value='search' />
}

这将回发到Gifts控制器中的Search方法,将搜索框的值传递给参数'searchTerm'

答案 1 :(得分:0)

你必须使用jquery构建它。在输入中添加一个类以用作选择器

<input type="search" name="searchTerm" class="txtSearch" />
<input type="button" value="Search By Category" class="btnSearch" />

然后在你的脚本中

$('.btnSearch').on('click', function(){
    var url = '@Url.Action("Search", "Gifts", new { searchTerm = "----" })'.replace("----", $('.txtSearch').val());
    window.location(url);
});