自定义ASP.NET模型绑定器是否应该将传递给Url.Action的值转换为正确的字符串表示形式?

自定义ASP.NET模型绑定器是否应该将传递给Url.Action的值转换为正确的字符串表示形式?,.net,asp.net-mvc-3,.net,Asp.net Mvc 3,我有日期时间和数字的自定义模型活页夹。它们可以很好地将我的请求字符串值转换为有效的强类型值 现在我需要Url.Action使用模型绑定器来做相反的事情。我传入一个数据时间或一个数字,我需要它知道如何将其转换为字符串 ASP.NET模型绑定是否也应该以另一种方式工作?是否将传递给Url.Action的值转换为正确的字符串表示形式 如果没有,有没有办法做到这一点 编辑 我问是因为我做了测试,它不起作用,但我不知道我是否遗漏了什么 ASP.NET模型绑定应该以另一种方式工作吗 好?将传递给Url.Ac

我有日期时间和数字的自定义模型活页夹。它们可以很好地将我的请求字符串值转换为有效的强类型值

现在我需要
Url.Action
使用模型绑定器来做相反的事情。我传入一个数据时间或一个数字,我需要它知道如何将其转换为字符串

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);
        }
    }
}
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

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);
        }
    }
}
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