5

ASP.NET MVC でクエリ文字列パラメーターの代替名を設定することは何とか可能ですか?

この単純なコントローラー Index アクションがあります。

public ActionResult Index(color = "")
{
    ...
}

呼び出しhttp://mysite.com/mypage/?color=yellowは非常にうまく機能し、colorパラメーターはクエリ文字列からその値「yellow」を自動的に取得します。

しかし今、私は同じページのローカライズされたバリアントを持ちたいと考えています。「かなり」ローカライズされたパラメーターを持ち、それでも同じコントローラー メソッドで動作します。例: http://mysite.com/mypage/?farve=gul. colorここでは、「gul」をパラメーターとしてデフォルトのIndex()ation メソッドに渡したいと思います。

クエリ文字列パラメーターの代替名のマッピングを設定するにはどうすればよいですか?

4

2 に答える 2

6

クエリ文字列パラメーターの代替名のマッピングを設定するにはどうすればよいですか?

カスタム モデル バインダーを作成できます。

したがって、すべての ASP.NET MVC アプリケーションと同様に、ビュー モデルを作成することから始めます。

public class MyViewModel
{
    public string Color { get; set; }
}

次に、このモデルのモデル バインダー:

public class MyViewModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var query = controllerContext.HttpContext.Request.QueryString;
        var value = query["color"] ?? query["gul"] ?? query["couleur"];
        return new MyViewModel
        {
            Color = value,
        };
    }
}

これはあなたのに登録されますApplication_Start

ModelBinders.Binders.Add(typeof(MyViewModel), new MyViewModelBinder());

これで、コントローラー アクションはビュー モデルをパラメーターとして受け取ることができます。

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

もちろん、プロパティでいくつかのカスタム属性を使用して、モデル バインダーをより柔軟にすることができます。

public class MyViewModel
{
    [PossibleQueries("color", "gul", "couleur")]
    public string Color { get; set; }
}

モデルバインダーでこれらの値を読み取り、null ではない値が見つかるまでクエリ文字列から読み取ってみてください。

于 2013-08-02T06:30:59.400 に答える
0

アクションとパラメーターがローカライズされた名前を持ち、デフォルト/英語のコントローラーからアクションを呼び出す、ローカライズされた/きれいな名前を持つ2番目のコントローラーはどうですか? この方法を使用すると、URL のすべての部分がローカライズされます。

Controller mypage
{
    ActionResult Index(string color)
    {
        // normal code
    }
}

Controller meineseite
{
    ActionResult Index(string farbe)
    {
        return mypage.Index(farbe);
    }
}
于 2013-08-02T06:33:57.483 に答える