У меня есть вызов метода действия get со списком параметров строки запроса, передаваемых этому методу. У некоторых из этих параметров есть вертикальная черта '|' в них. Проблема в том, что у меня не может быть параметров метода действия с символами вертикальной черты. Как сопоставить передаваемый параметр строки запроса с непередаваемым параметром C#? Или есть еще какие-то хитрости, о которых я не знаю?
Метод действия MVC и канал в параметре строки запроса
Ответы (1)
Вы можете написать пользовательский связыватель модели. Например, предположим, что у вас есть следующий запрос:
/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
)
{
...
}
person
Darin Dimitrov
schedule
18.09.2012