表单在mvc路由中获取值

时间:2013-01-28 21:56:49

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

我正在使用mvc4并且有一个字段,用户可以在其中输入一些文本到输入字段,该输入字段将传递给url并重定向到另一个页面,例如。 /搜索/<>

我的表单如下,但重定向为查询字符串。

<form class="search" action="@Url.Action("Index", "Search")">
<div>
    <input name="q" value="" type="search" />
    <input type="image" name="btn" value="search" src="@Url.Content("/image1.jpg")" />
</div>

</form>

知道如何改变我的表单以传递输入的值来输入“q”到网址。

3 个答案:

答案 0 :(得分:3)

您可以使用GET方法:

<form class="search" action="@Url.Action("Index", "Search")" method="get">
    <div>
        <input name="q" value="" type="search" />
        <input type="image" name="btn" value="search" src="@Url.Content("~/image1.jpg")" />
    </div>
</form>

您还可以使用专为此目的设计的Html.BeginForm帮助程序生成此完全相同的标记:

@using (Html.BeginForm("Index", "Search", FormMethod.Get, new { @class = "search" }))
{
    <div>
        <input name="q" value="" type="search" />
        <input type="image" name="btn" value="search" src="@Url.Content("~/image1.jpg")" />
    </div>
}

当您使用GET方法时,所有输入元素值将在提交表单时在查询字符串中发送。

如果您想将搜索字符串附加到网址的路径部分而不是使用查询字符串参数,我邀请您阅读Scott Hanselman撰写的following blog post。我只引用他的结论:

  

在完成所有这些努力以获得请求路径中的疯狂内容之后,就是这样   值得一提的是,只需将值保留为Query的一部分   字符串(记得在这篇文章的开头回答?)更容易,   更清洁,更灵活,更安全。

答案 1 :(得分:0)

你的索引视图应该是

   @{
       ViewBag.Title = "Index";
    }

    <h2>Index</h2>
    @using (Html.BeginForm("Search", "Home"))
    {
        @Html.TextBox("query")
    }

和你的HomeController一样

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
    public ActionResult Search(string query)
    {
        if (string.IsNullOrEmpty(query) == false)
            return RedirectToAction(query);
        else 
            return RedirectToAction("Index");
    }
}
  1. 键入要在文本框中重定向的操作的名称,然后按Enter键 希望这会有所帮助:)

答案 2 :(得分:0)

public ActionResult Search(string query)
{
    if (string.IsNullOrEmpty(query) == false)
        return RedirectToAction("ACTION NAME",query);//prepend your action name
    else 
        return RedirectToAction("Index");
}