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
。