0

在 ASP.NET MVC (4) 应用程序中,我使用了一个 3rd 方 Javascript 库,该库会自动神奇地发回一个名称不佳 (IMO) 的查询字符串参数。我可以使用以下方法在模型绑定中截取此值:

public ActionResult MyAction([Bind(Prefix="rp")] int pageSize = 50) 
{
}

但是,在我使用分页的所有地方中的这段代码很快就会变得令人厌烦。

是否可以在 ASP.NET MVC 中全局设置具有特定前缀/替换组合的 [BindAttribute]?

一种解决方法是修改 Javascript 库(不受欢迎);或Request.QueryString手动从属性中获取参数;但我希望保持清洁。

4

1 回答 1

2

您可以使用视图模型:

public class MyViewModel
{
    public int PageSize { get; set; }
}

在您的控制器操作中:

public ActionResult MyAction(MyViewModel model) 
{
    ...
}

然后为此视图模型编写一个自定义模型绑定器:

public class MyViewModelBinder: DefaultModelBinder
{
    protected override void BindProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor)
    {
        bindingContext.ModelName = "rp";
        base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
    }
}

将在以下位置注册Application_Start

ModelBinders.Binders.Add(typeof(MyViewModel), new MyViewModelBinder());
于 2012-04-16T06:06:44.203 回答