querystring参数的备用名称
本文关键字:备用 参数 querystring | 更新日期: 2023-09-27 18:25:51
是否可以在ASP.NET MVC中为查询字符串参数设置备用名称?
我有这个简单的控制器索引操作:
public ActionResult Index(color = "")
{
...
}
调用http://mysite.com/mypage/?color=yellow
非常有效,color
参数会自动从查询字符串中获取其值"yellow"。
但现在我希望有一个相同页面的本地化变体,具有"漂亮"的本地化参数,但仍使用相同的控制器方法。示例:http://mysite.com/mypage/?farve=gul
。在这里,我希望将"gul"作为color
参数传递给默认的Index()
方法。
如何为querystring参数的备用名称设置映射?
如何为querystring参数的备用名称设置映射?
你可以写一个自定义的模型活页夹。
因此,在每个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的值。
第二个具有本地化/漂亮名称的控制器怎么样,其中操作和参数具有本地化名称,并从默认/英文控制器调用操作?使用此方法,您可以本地化url的所有部分。
Controller mypage
{
ActionResult Index(string color)
{
// normal code
}
}
Controller meineseite
{
ActionResult Index(string farbe)
{
return mypage.Index(farbe);
}
}