查询字符串参数中的MVC操作方法和管道

时间:2012-09-18 11:23:12

标签: asp.net-mvc-3 razor query-string actionmethod

我调用了一个get action方法,其中包含一个传递给该方法的查询字符串参数列表。其中一些参数有一个管道'|'在他们中。问题是我不能在其中包含带管道符的动作方法参数。如何将管道查询字符串参数映射到非管道C#参数?还是有其他一些我不知道的技巧?

1 个答案:

答案 0 :(得分:2)

您可以编写自定义模型绑定器。例如,假设您有以下请求:

/foo/bar?foos=foo1|foo2|foo3&bar=baz

并且您希望将此请求绑定到以下操作:

public ActionResult SomeAction(string[] foos, string bar)
{
    ...
}

您所要做的就是编写自定义模型绑定器:

public class PipeSeparatedValuesModelBinder : IModelBinder
{
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var values = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
        if (values == null)
        {
            return Enumerable.Empty<string>();
        }

        return values.AttemptedValue.Split('|');
    }
}

然后:

public ActionResult SomeAction(
    [ModelBinder(typeof(PipeSeparatedValuesModelBinder))] string[] foos, 
    string bar
)
{
    ...
}