是否可以在 ASP.NET MVC 中为查询字符串参数设置备用名称?
我有这个简单的 Controller 索引操作:
public ActionResult Index(color = "")
{
...
}
调用 http://mysite.com/mypage/?color=yellow
效果很好,color
参数自动从查询字符串中获取其值“yellow” .
但现在我想要同一页面的本地化变体,具有“漂亮”的本地化参数,但仍使用相同的 Controller 方法。示例:http://mysite.com/mypage/?farve=gul
。在这里,我希望将“gul”作为 color
参数传递给默认的 Index()
方法。
如何为查询字符串参数的备用名称设置映射?
最佳答案
How do I set mappings for alternate names for querystring parameters?
您可以编写自定义模型 Binder 。
因此,就像在每个 ASP.NET MVC 应用程序中一样,您从编写 View 模型开始:
public class MyViewModel
{
public string Color { get; set; }
}
然后是这个模型的模型 Binder :
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());
现在您的 Controller 操作可以将 View 模型作为参数:
public ActionResult Index(MyViewModel model)
{
...
}
当然,您可以通过在属性上使用一些自定义属性来使模型绑定(bind)器更加灵活:
public class MyViewModel
{
[PossibleQueries("color", "gul", "couleur")]
public string Color { get; set; }
}
并在模型 Binder 中读取这些值并尝试从查询字符串中读取它们,直到找到一个不为空的值。
关于c# - 查询字符串参数的备用名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18010118/