2012-04-16 77 views
0

在ASP.NET MVC(4)應用程序中,我使用了第三方Javascript庫,它自動以奇妙的方式發送帶有不良名稱(IMO)的查詢字符串參數。我可以攔截模型下面的結合該值:在全局中使用BindAttribute

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

然而,這所有的代碼,我使用分頁很快得到討厭的地方里面。

是否有可能在ASP.NET MVC內全局設置[BindAttribute]與特定的前綴/替換組合?

解決方法是修改Javascript庫(不受歡迎);或手動從Request.QueryString屬性中取出參數;但我希望保持清潔。

回答

2

你可以使用一個視圖模型:

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

在你的控制器動作(S):

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