我有日期时间和数字的自定义模型活页夹。它们可以很好地将我的请求字符串值转换为有效的强类型值。
现在我需要Url.Action
使用 Model Binder 来做相反的事情。我传入一个数据时间或一个数字,我需要它知道如何将其转换为字符串。
ASP.NET 模型绑定是否也应该以其他方式工作?将传递给 Url.Action 的值转换为正确的字符串表示形式?
如果没有,有没有办法做到这一点?
编辑
我问是因为我测试过但它不起作用但我不知道我是否遗漏了什么
我有日期时间和数字的自定义模型活页夹。它们可以很好地将我的请求字符串值转换为有效的强类型值。
现在我需要Url.Action
使用 Model Binder 来做相反的事情。我传入一个数据时间或一个数字,我需要它知道如何将其转换为字符串。
ASP.NET 模型绑定是否也应该以其他方式工作?将传递给 Url.Action 的值转换为正确的字符串表示形式?
如果没有,有没有办法做到这一点?
编辑
我问是因为我测试过但它不起作用但我不知道我是否遗漏了什么
ASP.NET 模型绑定是否也应该以其他方式工作?将传递给 Url.Action 的值转换为正确的字符串表示形式?
不,模型绑定不能以其他方式工作。这就是路由基础设施的工作。
如果没有,有没有办法做到这一点?
我可以看到的一个想法是创建一个自定义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);
}
}
}
有内置的 Action 方法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
在其中创建。