【问题标题】:Customize ASP.NET MVC RouteValues serialization into GET parameters自定义 ASP.NET MVC RouteValues 序列化为 GET 参数
【发布时间】:2011-01-21 23:08:28
【问题描述】:

美好的一天!

我将 DateTime 值作为路由参数传递,它变成了 GET 参数,格式如下:

http://example.com/?DateFrom=01%2F01%2F2011%2000%3A00%3A00&DateTo=01%2F31%2F2011%2000%3A00%3A00

为了便于阅读:这是一个从以下位置编码的 URL:

http://example.com/?DateFrom=01/01/2011 00:00:00&DateTo=01/31/2011 00:00:00

有没有办法在不使用自定义路由的情况下自定义此序列化

提前致谢!

【问题讨论】:

    标签: asp.net-mvc-2 routing routevalues


    【解决方案1】:

    您可以传递格式化字符串,而不是传递 DateTime:

    <%= Html.ActionLink(
        "link text", 
        "someaction", 
        new { 
            DateFrom = Model.DateFrom.ToString("yyyy-MM-dd"),
            DateTo = Model.DateTo.ToString("yyyy-MM-dd"),
        }
    ) %>
    

    【讨论】:

    • 问题是我传递给路由值的不是单个DateTime 值,而是包含大约10 个参数(过滤值)的对象UrlParams。我有一个接受这个对象作为参数的动作。它无需任何人工干预即可工作,但 URL 中的 DateTime 值很难看...
    • @artvolk,在这种情况下,不是传递 UrlParams 对象,而是传递一个 UrlParamsViewModel 对象,该对象将正确格式化日期。 AutoMapper可以帮助对象之间的转换。
    • 我的UrlParams 的存在只是为了在 URL 中传递参数,所以它已经是一种 ViewModel 了:)。看来我应该实现一些逻辑来手动格式化\取消格式化值?
    • @artvolk,在这个 UrlParams 对象中,您可以用字符串替换 DateTime 属性,这样您就可以获得正确的格式。作为替代方案,将原始 DateTime 保留为私有支持字段并公开相应的公共字符串属性,这些属性将被正确格式化。
    • 是的,看来我应该这样做。但是替换\自定义查询字符串序列化呢?这甚至可能吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 2018-04-24
    • 2017-02-07
    相关资源
    最近更新 更多