0

ASP.NET MVC (4) アプリケーションで、不適切な名前 (IMO) のクエリ文字列パラメーターを自動的に送り返すサード パーティの Javascript ライブラリを使用しています。この値は、モデル バインディングで次のようにインターセプトできます。

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 に答える