2012-09-18 41 views
0

我有一個調用get操作方法與查詢字符串參數列表傳遞給該方法。其中一些參數有一個管道'|'在他們中。問題是我無法在其中使用管道字符的操作方法參數。如何將管道查詢字符串參數映射到非管道C#參數?或者還有其他一些我不知道的技巧嗎?MVC操作方法和查詢字符串參數管道

回答

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 
) 
{ 
    ... 
}