【问题标题】:How add params to my form如何将参数添加到我的表单
【发布时间】:2015-12-21 09:38:30
【问题描述】:
<form method="post" class="search-form" action="?">
  <fieldset>
   <input class="search home_input_search" placeholder="Поиск" type="search" />
   <input  type="submit" class="subm but_search" value="" />
 </fieldset>
</form>

我有一个表单 - 搜索,这是布局和我的任务在创建链接到控制器时与 Products/index?search_name=something 之类的参数一致。而且我不知道如何在链接中传输值文本框。

【问题讨论】:

  • 哦,真的不知道,可能是误点击
  • 你不知道。您发布表单并添加文本框的值(如果它是 GET)。因为你没有给你的文本框 name 属性,所以什么都不会发布 - 将 name="search_name" 添加到 html
  • 所以你的意思是什么时候我会在我的控制器中得到这个字段..我在 action="?" 中给出的主要问题-> 例如 action="Home/Index?search=(and this field my search text box)"
  • 如果您有一个带有参数string search_name 的控制器(或一个包含带有string search_name 的属性的模型),那么它将被正确绑定。但应该是method="get"(不是帖子)
  • 建议你看一下this answer中的代码实现搜索表单的例子

标签: c# html asp.net-mvc razor


【解决方案1】:

在表单中添加 onsubmit 事件处理程序,它应该:

  1. 使用查询字符串 ?search_name= 输入值创建 URL
  2. 将 window.location.href 设置为创建的 url
  3. 返回假

编辑:当然,您可以用不同的方式实现它,在这种情况下不需要表单。

【讨论】:

  • 为什么要在 Javascript 中编写代码,而表单上只需要两个属性?
  • 那么如何转移到动作 jquery 函数 yo:D 我可以写像 action="some_js_function()" 应该会用我的参数重定向到我结束的链接?我认为 - 不(
【解决方案2】:

你必须给inputs 他们在发帖时应该拥有的name,并在form 上设置正确的action。输入中的name 决定了URL 中的键(因为您使用GET 方法)。在form 上设置action 将指示将其发送到哪里。

<form method="post" class="search-form" action="Products/index" method="GET">
  <fieldset>
   <input name="search_name" class="search home_input_search" placeholder="Поиск" type="search" />
   <input  type="submit" class="subm but_search" value="" />
 </fieldset>
</form>

【讨论】:

    【解决方案3】:

    首先,最好调用控制器参数“searchName”而不是“search_name”。这符合代码约定。

    接下来,当您在浏览器中调用 Proudcts/index?search_name=somethink 时,您将发起 GET 请求。 GET 请求没有正文并与查询参数进行通信。

    当您创建新表单并将它们提交到服务器时,您正在启动 POST 请求(默认情况下)。发布请求具有包含请求参数的正文部分。

    那么我们应该从View开始。如果你想使用查询字符串,你应该明确地create GET-form:

    @using (Html.BeginForm("ControllerMethodName", "ControllerName", FormMethod.Get))
    {
    }
    

    接下来,您应该将 name 属性添加到您的输入中,其名称与控制器方法参数中的名称相同:

    <input class="search home_input_search" name="searchName" placeholder="Поиск" type="search" />
    

    也可以使用HtmlHelper method生成html:

    @Html.TextBox("searchName", string.Empty, new Dictionary<string, object> { { "class", "search home_input_search" }, { "placeholder", "Поиск" } })
    

    最后,您可以根据需要设置任意数量的参数:

    @using (Html.BeginForm("ControllerMethodName", "ControllerName", FormMethod.Get))
    {
        @Html.Label("Поиск")
        @Html.TextBox("searchName", string.Empty, new Dictionary<string, object> { { "class", "search home_input_search" }, { "placeholder", "Поиск" } })
        @Html.Label("Включая вложенные")
        @Html.CheckBox("includeNested", true)
    }
    

    【讨论】:

    • thx,帮手决定了我的问题=) 他采用 mysite.com 之类的基本 url 并向他添加控制器和方法控制器如何不做 html 代码。如果我现在在 mysite.com/home/method/ html 添加 mysite.com/home/method/method
    • 哦,我不明白你是否还有路由问题。请注意,Html.BeginForm 只是生成的 html 代码,您可以在浏览器中看到您的 html 页面的真实
      代码。
    • 如果我已经有 ?params=1 并且我想添加第二个,例如 ?params=1&params2=2。我需要做什么?
    • 您可以根据需要添加任意数量的参数(但您对查询字符串长度有限制)。只需将另一个参数添加到控制器的方法中,然后显式地或通过 HtmlHelper 添加另一个具有名称的输入。如果您需要获取其他类型,您不仅可以添加文本框(请参阅我的答案中的最后一个链接)。
    • 哦,对不起,也许我提出了错误的问题。我的主页在头部搜索文本框中。我的产品控制器已经有像?category=1 这样的参数,而我要做的是,我需要去 ?category=1 并像 anythink 一样添加搜索文本。所以,当我留在类别 = 1 时,我只需要添加第二个参数。我需要获取完整链接并与新参数连接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 2013-09-14
    • 1970-01-01
    • 2020-09-04
    • 2012-03-05
    相关资源
    最近更新 更多