gpt4 book ai didi

.net - 在特定情况下,ASP.NET MVC WebGrid 没有正确地将当前参数传递给分页链接

转载 作者:行者123 更新时间:2023-12-05 01:26:14 26 4
gpt4 key购买 nike

WebGrid 分页链接在所有情况下都能正常工作,除了一个(我注意到)。

当您在 MVC 中使用 CheckBoxFor 时,它会创建一个 input[type=hidden] 和一个 input[type=check-box]对于同一个字段,以便它可以处理状态。因此,如果您有一个名为 X 的字段并在 GET 方法中提交您的表单,您最终将得到如下 URL:

http://foo.com?X=false&X=true

默认模型绑定(bind)器可以理解这些多个实例 os X 并计算出它的值。

当您尝试对 WebGrid 进行分页时会出现问题。它的行为是 try catch 当前请求参数并在分页链接中重新传递它们。但是,由于有多个 X,它将传递 X=false,true 而不是预期的 X=falseX =false&X=true

这是个问题,因为 X=false,true 无法正确绑定(bind)。它将在操作开始之前在模型绑定(bind)器中触发异常。

有什么办法可以解决吗?

编辑:

这似乎是一个非常具体的问题,但事实并非如此。几乎每个带有复选框的搜索表单都会破坏 WebGrid 分页。 (如果您使用的是 GET)

编辑 2:

我认为我仅有的两个选择是:

  • 构建我自己的 WebGrid 寻呼机,该寻呼机在为分页链接传递参数时更加智能
  • 构建我自己的 bool 模型绑定(bind)器,将 false,true 理解为有效

最佳答案

如果其他人遇到所描述的问题,您可以使用像这样的自定义模型绑定(bind)器解决此问题:

public class WebgridCheckboxWorkaroundModelBinder : DefaultModelBinder
{
protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, System.ComponentModel.PropertyDescriptor propertyDescriptor)
{
if (propertyDescriptor.PropertyType == typeof (Boolean))
{
var value = bindingContext.ValueProvider.GetValue(propertyDescriptor.Name);
if (value.AttemptedValue == "true,false")
{
PropertyInfo prop = bindingContext.Model.GetType().GetProperty(propertyDescriptor.Name, BindingFlags.Public | BindingFlags.Instance);
if (null != prop && prop.CanWrite)
{
prop.SetValue(bindingContext.Model, true, null);
}
return;
}
}

base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}

关于.net - 在特定情况下,ASP.NET MVC WebGrid 没有正确地将当前参数传递给分页链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11234623/

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