在ASP.net MVC中查看特定格式代码

在ASP.net MVC中查看特定格式代码,.net,asp.net-mvc,architecture,.net,Asp.net Mvc,Architecture,只是一些架构问题:我使用ASP.NETMVC,完全依赖具有视图模型类的强类型视图 由于表示是视图的工作,这些类不仅包含一些字段,还包含一些格式化函数,例如 // The ViewModel contains a List<Comment> which the view.aspx iterates // through, calling this function in a foreach-loop // PostingDateFormat and DesiredCulture are

只是一些架构问题:我使用ASP.NETMVC,完全依赖具有视图模型类的强类型视图

由于表示是视图的工作,这些类不仅包含一些字段,还包含一些格式化函数,例如

// The ViewModel contains a List<Comment> which the view.aspx iterates
// through, calling this function in a foreach-loop
// PostingDateFormat and DesiredCulture are fields set by the controller,
// and I don't know if they should be
public string GetCommentDateLine(Comment c)
{
    return c.CommentDate.ToString(this.PostingDateFormat, this.DesiredCulture);
}
//ViewModel包含view.aspx迭代的列表
//通过,在foreach循环中调用此函数
//PostingDateFormat和DesiredCulture是控制器设置的字段,
//我不知道他们是否应该
公共字符串GetCommentDateLine(注释c)
{
返回c.CommentDate.ToString(this.PostingDateFormat,this.DesiredCulture);
}
我只是想知道这是否正确,或者我是否应该把它移到其他地方?对于由多个视图使用的函数,这一点尤为重要。他们是否应该生活在阶层之外的特殊阶层中?或者复制/粘贴(yikes)到每个视图模型类中


这也是因为我可能在同一视图模型上有多个视图:一个用于浏览器的普通视图,另一个用于RSS阅读器的视图。当然,控制器应该只使用数据填充viewmodel,并且视图本身应该根据目标媒体格式化数据(即RSS提要中的日期的格式不同于普通网站上的日期)。我应该为普通和RSS使用单独的ViewModels吗?或者控制器是否应该知道我需要一个RSS字段,并使用不同的值填充“PostingDateFormat”字段?这似乎是更好的解决方案(无需为每个视图复制ViewModels),但我不确定控制器是否有责任知道视图需要哪种日期格式。

我建议将所有视图格式逻辑放入HtmlHelper扩展方法中。这样,viewmodels就不包含任何格式逻辑,只需执行它们要执行的操作—将对象从控制器传送到视图

所以在你的情况下,我猜你会创造一些东西,比如:

namespace System.Web.Mvc
{
    public static class HtmlExtensions
    {
        public static string CommentDateLine(this HtmlHelper html,
                                             Comment comment,
                                             string format,
                                             IFormatProvider formatProvider)
        {
            return comment.CommentDate.ToString(format, formatProvider);
        }
    }
}
至于PostingDateFormat问题,正如您所暗示的,我肯定不会为每个视图创建单独的视图模型。您可以为RSS日期格式创建一个单独的扩展方法(这可能不需要在ViewModel中设置PostingDateFormat?)

HTHs,

Charles

只是想补充一点:我已经将实际的格式提供程序和日期格式放入web.config中,并通过中心设置类访问它。这样,Html助手实际上只格式化它,而不关心实际的格式。