在ASP.NET MVC(4)应用程序中,我使用的是第三方Javascript库,它自动神奇地发回一个名字不好的查询字符串参数(IMO)。我可以使用以下内容拦截模型绑定中的此值:
public ActionResult MyAction([Bind(Prefix="rp")] int pageSize = 50)
{
}
然而,在我使用分页的所有地方内的这段代码很快就会让人厌烦。
在ASP.NET MVC中是否可以使用特定的前缀/替换组合全局设置[BindAttribute]?
解决方法是修改Javascript库(不合需要的);或者手动从Request.QueryString
属性中取出参数;但我希望保持清洁。
答案 0 :(得分: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());