2

我正在使用 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>

知道如何更改表单以将输入的值传递给 url 输入“q”。

4

3 回答 3

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 方法时,所有输入元素值都将在提交表单时在查询字符串中发送。

如果您想在 url 的路径部分附加搜索字符串,而不是使用查询字符串参数,我邀请您阅读following blog postScott Hanselman 的文章。我只引用他的结论:

在为在请求路径中获得疯狂的东西所做的所有努力之后,值得一提的是,简单地将值保留为查询字符串的一部分(还记得本文开头的 WAY 吗?)更容易、更清洁、更灵活,而且更多安全的。

于 2013-01-28T21:58:14.153 回答
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 希望这会有所帮助:)
于 2013-01-28T22:27:13.000 回答
0
public ActionResult Search(string query)
{
    if (string.IsNullOrEmpty(query) == false)
        return RedirectToAction("ACTION NAME",query);//prepend your action name
    else 
        return RedirectToAction("Index");
}
于 2013-10-10T10:41:32.400 回答