是否可以在ASP.NET MVC中为查询字符串参数设置备用名称?
我有这个简单的控制器索引动作:
public ActionResult Index(color = "")
{
...
}
Run Code Online (Sandbox Code Playgroud)
调用http://mysite.com/mypage/?color=yellow非常好,color参数会自动从查询字符串中获取其值"黄色".
但是现在我希望有一个同一页面的本地化变体,带有"漂亮"的本地化参数,但仍然使用相同的控制器方法.示例:http://mysite.com/mypage/?farve=gul.在这里,我希望将"gul"作为color参数传递给默认Index()方法.
如何为查询字符串参数设置备用名称的映射?
如何为查询字符串参数设置备用名称的映射?
您可以编写自定义模型绑定器.
因此,在每个ASP.NET MVC应用程序中,您都可以通过编写视图模型来开始:
public class MyViewModel
{
public string Color { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后是这个模型的模型绑定器:
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,
};
}
}
Run Code Online (Sandbox Code Playgroud)
将在您的注册时注册Application_Start:
ModelBinders.Binders.Add(typeof(MyViewModel), new MyViewModelBinder());
Run Code Online (Sandbox Code Playgroud)
现在你的控制器动作可以将视图模型作为参数:
public ActionResult Index(MyViewModel model)
{
...
}
Run Code Online (Sandbox Code Playgroud)
当然,您可以通过在属性上使用一些自定义属性来使模型绑定器更灵活:
public class MyViewModel
{
[PossibleQueries("color", "gul", "couleur")]
public string Color { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并在模型绑定器中读取这些值并尝试从查询字符串中读取它们,直到找到一个非空值.
| 归档时间: |
|
| 查看次数: |
560 次 |
| 最近记录: |