asp.net-mvc – ASP.NET MVC – 通过GET提交时,让Html.BeginForm
我有一个通过
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:为什么甚至打扰辅助方法? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – EntityFunctions.CreateDateTime问题与linq
- asp.net-mvc-3 – 尝试检索不存在的列的实体框架
- 什么是最小的方式来缩小ASP.NET生成的Javascript?
- asp.net – 如何从服务器控件中删除’name’属性?
- asp.net-mvc – 我的模型中名为Title的属性与我视图中的Vie
- asp.net-mvc-4 – ASP.NET MVC Web Api无法将QueryString映
- 如何实现像WCF一样的Asp.net MVC OneWay / FireAndForget调
- ASP.NET 2.0和4.0似乎在Forms身份验证中以不同方式处理根UR
- 想要像asp.net或stackoverflow那样选择标签吗?
- 单元测试 – 自动混合和WebApi控制器
- asp.net-mvc – 添加视图模型类下拉列表不显示我
- asp.net – 我可以在GoDaddy上使用NHibernate吗?
- asp.net-mvc-3 – ViewBag- MVC3-ASP.NET
- asp.net-web-api – WebApi DelegatingHandler未
- asp.net-mvc – MVC 5 OWIN登录声明和Antiforger
- asp.net – 以编程方式在ASPX页面中设置’visibl
- asp.net-core – 什么是aspnet50和aspnetcore50?
- asp.net – CA1305:int.Parse(String)
- asp.net-mvc – ASP.Net MVC:静态HTML文件的Ren
- asp.net级联下拉与差异