gpt4 book ai didi

asp.net-mvc-3 - MvcContrib 网格和复选框

转载 作者:行者123 更新时间:2023-12-02 19:48:11 25 4
gpt4 key购买 nike

假设我渲染了一个复选框:

@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%2Cfalse code>,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, null, null, routeValues, null);
RenderText(link);
}
else
{
base.RenderHeaderText(column);
}
}
}

...然后替换

                if(! routeValues.ContainsKey(key))
{
routeValues[key] = Context.RequestContext.HttpContext.Request.QueryString[key];
}

...与routeValues[key] = Context.RequestContext.HttpContext.Request.QueryString[key];

并像这样使用新的渲染:

@Html.Grid()...RenderUsing(new CustomTableGridRenderer())

关于asp.net-mvc-3 - MvcContrib 网格和复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12853599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com