1

日時と番号用のカスタムモデルバインダーがあります。それらは私のリクエスト文字列値を有効な強い型の値に変換するのにうまく機能します。

Url.Action次に、モデルバインダーを使用して反対のことを行う必要があります。データ時間または数値を渡し、それを文字列に変換する方法を知る必要があります。

ASP.NETモデルバインディングは他の方法でも機能するはずですか?Url.Actionに渡された値を正しい文字列表現に変換しますか?

そうでない場合、それを達成する方法はありますか?

編集

テストしたのですが、うまくいきませんが、何かが足りないのかわかりません。

4

1 に答える 1

1

ASP.NET Model Binding は他の方法でも機能するはずですか? Url.Action に渡された値を正しい文字列表現に変換していますか?

いいえ。Model Binding は他の方法では機能しません。それがルーティング インフラストラクチャの仕事です。

そうでない場合、それを達成する方法はありますか?

私が見ることができる 1 つのアイデアは、カスタムRouteValueDictionaryクラスを作成することです。

public class CustomRouteValueDictionary: RouteValueDictionary
{
    public CustomRouteValueDictionary(object values)
    {
        foreach (var prop in values.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
        {
            var value = prop.GetValue(values, null);

            if (value.GetType() == typeof(DateTime))
            {
                value = ((DateTime)value).ToString("yyyy/MM/dd");
            }

            Add(prop.Name, value);
        }
    }
}

組み込みのアクション メソッドがあり、パラメーターとしてUrlHelper受け取りRouteValueDictionary、これを渡すことができますCustomRouteValueDictionary

元。

これの代わりに

@Url.Action("SomeAction", "SomeController", new { dt = DateTime.Now })

Output: /SomeController/SomeAction?dt=07%2F21%2F2012%2019%3A21%3A59 

使用できます

@Url.Action("SomeAction", "SomeController", new 
   CustomRouteValueDictionary(new { dt = DateTime.Now }))

Output: /SomeController/SomeAction?dt=2012-07-21 

匿名オブジェクトを直接受け取り、その中に作成するカスタム拡張メソッドを作成することもできますCustomRouteValueDictionary

于 2012-07-21T14:00:40.513 に答える