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

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())

(编辑:李大同)

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

    推荐文章
      热点阅读