asp.net-mvc-3 – MvcContrib网格和复选框
发布时间:2020-12-15 20:14:23 所属栏目:asp.Net 来源:网络整理
导读:我说我渲染一个复选框: @Html.CheckboxFor(x = x.Checked) // Checked is true by default ASP会把它改为: input checked="checked" data-val="true" data-val-required="The field is required." id="Checked" name="Checked" type="checkbox" value="tru
我说我渲染一个复选框:
@Html.CheckboxFor(x => x.Checked) // Checked is true by default ASP会把它改为: <input checked="checked" data-val="true" data-val-required="The field is required." id="Checked" name="Checked" type="checkbox" value="true" /> <input name="Checked" type="hidden" value="false" /> 由于ASP为复选框输出两个具有相同名称的输入,所以在提交表单时,还会在URL中获取两个GET参数: http://...?Checked=true&Checked=false 让我们说我也使用MvcContrib来显示一个排序表. 当我对列进行排序时,MvcContrib无法理解重复的GET参数,而不是写入?Checked = true& Checked = false,它写入?Checked = true,false,不能被MVC3解析为bool.排序后的错误信息为: String was not recognized as a valid Boolean. 有没有人遇到这个问题与MvcContrib网格? 解决方法
好的,想想我已经想出了解决方案:
创建自己的HtmlTableGridRenderer: public class CustomTableGridRenderer<TViewModel> : HtmlTableGridRenderer<TViewModel> where TViewModel : class { protected override void RenderHeaderText(GridColumn<TViewModel> column) { if (IsSortingEnabled && column.Sortable) { string sortColumnName = GenerateSortColumnName(column); bool isSortedByThisColumn = GridModel.SortOptions.Column == sortColumnName; var sortOptions = new GridSortOptions { Column = sortColumnName }; if (isSortedByThisColumn) { sortOptions.Direction = (GridModel.SortOptions.Direction == SortDirection.Ascending) ? SortDirection.Descending : SortDirection.Ascending; } else //default sort order { sortOptions.Direction = column.InitialDirection ?? GridModel.SortOptions.Direction; } var routeValues = CreateRouteValuesForSortOptions(sortOptions,GridModel.SortPrefix); //Re-add existing querystring foreach (var key in Context.RequestContext.HttpContext.Request.QueryString.AllKeys.Where(key => key != null)) { if (!routeValues.ContainsKey(key)) { routeValues[key] = Context.RequestContext.HttpContext.Request.QueryString[key]; } } var link = HtmlHelper.GenerateLink(Context.RequestContext,RouteTable.Routes,column.DisplayName,null,routeValues,null); RenderText(link); } else { base.RenderHeaderText(column); } } } …只是替换 if(! routeValues.ContainsKey(key)) { routeValues[key] = Context.RequestContext.HttpContext.Request.QueryString[key]; } … with routeValues [key] = Context.RequestContext.HttpContext.Request.QueryString [key]; 并使用您的新渲染: @ Html.Grid()… RenderUsing(new CustomTableGridRenderer()) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 从内部线程更新网页
- 使用asp.net连接到mySQL数据库
- .net – 存储加密密钥的位置
- asp.net-mvc – 有没有合理的大型Web应用程序(例如1M页面浏
- asp.net-core – 在执行DI时指定服务选项的干净方法
- asp.net – 如何直接在.aspx页面中访问web.config设置?
- asp.net-mvc-3 – MVC绑定到带有列表属性的模型忽略其他属性
- asp.net – 确定所需服务器数量的最佳方法
- asp.net – System.Web.Optimization是.NET Framework 4.5的
- asp.net-mvc – 从ASP.NET Web API返回一些字段