1

get actionメソッドを呼び出し、そのメソッドに渡されるクエリ文字列パラメーターのリストを使用します。それらのパラメータのいくつかにはパイプ'|'があります それらの中で。問題は、パイプ文字を含むアクションメソッドパラメータを使用できないことです。パイプされたクエリ文字列パラメーターをパイプされていないC#パラメーターにマップするにはどうすればよいですか?それとも私が知らない他のトリックはありますか?

4

1 に答える 1

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
)
{
    ...
}
于 2012-09-18T11:27:04.207 に答える