加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – ASP.NET MVC – 通过GET提交时,让Html.BeginForm

发布时间:2020-12-16 07:21:15 所属栏目:asp.Net 来源:网络整理
导读:我有一个通过 Html.BeginForm()呈现的表单,它作为主页面中的一个组件存在,以便它出现在应用程序的每个页面上.我使用Mvc Futures汇编中的Html.RenderAction()完??成了这项工作.这是一个简单的搜索表单,它在搜索表单本身下更新同一组件中的某些项目,并执行GET,
我有一个通过 Html.BeginForm()呈现的表单,它作为主页面中的一个组件存在,以便它出现在应用程序的每个页面上.我使用Mvc Futures汇编中的Html.RenderAction()完??成了这项工作.这是一个简单的搜索表单,它在搜索表单本身下更新同一组件中的某些项目,并执行GET,以便搜索项出现在查询字符串中.

<div class="sideBarContent">
   <h2>Search Products</h2>

   <% using (Html.BeginForm(ViewContext.RouteData.Values["action"].ToString(),ViewContext.RouteData.Values["controller"].ToString(),FormMethod.Get)) { %>

      <fieldset>
         <legend>Search Products</legend>

         <div class="formRow">
            <label for="ProductsSearch">Search</label>
            <%= Html.TextBox("ProductsSearch") %>
         </div>

         <input type="submit" value="Search" class="button" />
       </fieldset>

   <% } %>

   <ul>
      // Products will eventually be listed here
   </ul>
</div>

我需要这个表单来执行以下操作:

1)它应该对附加’ProductsSearch’作为查询字符串参数的任何当前页面执行GET(例如:example.com/?ProductsSearch=test或example.com/books/fiction?ProductsSearch=test)

2)它应该记住查询字符串中已有的任何现有的查询字符串参数,在单击“搜索”按钮后保留它们.在搜索后单击它的example.com/myOrders?page=2应该转到example.com/myOrders?page=2u0026amp;ProductsSearch=test)

我可以做到1)但不能解决2).

我通常认为,对于一个from到GET并附加查询字符串params,它需要有隐藏的表单字段,所以我可以编写一个实用程序函数,自动为任何查询字符串值添加一堆隐藏的表单字段,但我想检查是否有没有这是一种更简单的方法,或者我可能会采取错误的方式.

干杯!

解决方法

您需要执行隐藏的表单字段方法.

即使您可以将整个查询字符串附加到< form>的action属性中的URL末尾.标签,浏览器在进行GET表单提交时不注意这一点.

你的方法并不太难;你想做这样的事情:

public static string QueryStringAsHidden(this HtmlHelper helper)
{
    var sb = new StringBuilder();
    foreach (var key in HttpContext.Current.Request.QueryString.AllKeys)
    {
        if (! key.StartsWith("ProductSearch"))
            sb.Append(helper.Hidden(key,HttpContext.Current.Request.QueryString[key]));
    }
        return sb.ToString();
    }

我把.StartsWith()放在那里,因为你不想在搜索页面上提交两次搜索字符串(现在你可以在ProductSearch中添加分页和其他搜索特定的变量.

编辑:PS:要使表单发布到当前页面,您不必显式提供操作和控制器 – 您也可以发送空值.

编辑2:为什么甚至打扰辅助方法?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读