我会定义以下路线:
routes.MapRoute(
"Default",
"{controller}/{action}/{someparam}",
new { controller = "Users", action = "Search", id = UrlParameter.Optional }
);
然后为字符串数组编写自定义模型绑定器:
public class StringArrayModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value != null)
{
return value.AttemptedValue.Split(',');
}
return base.BindModel(controllerContext, bindingContext);
}
}
最后我会像这样定义控制器动作:
public ActionResult Search(
[ModelBinder(typeof(StringArrayModelBinder))] string[] users,
string someparam
)
{
...
}
如果您希望此自定义模型绑定器应用于所有将字符串数组作为操作参数的操作,您可以在 Application_Start 中声明它:
ModelBinders.Binders.Add(typeof(string[]), new StringArrayModelBinder());
然后您的控制器操作将简单地变为:
public ActionResult Search(string[] users, string someparam)
{
...
}