0

我有一个在用户登录时实例化的用户对象,该对象存储所有用户的设置:

public class SiteUser
{

    public string LoginId { get; set; }
    public string Name { get; set; }        
    public DateTime PasswordChangedOn { get; set; }
    public string Language { get; set; }
    public string DateFormat { get; set; }
    public string RoleName { get; set; }        
    public ICollection<SitePermission> SitePermissions { get; set; }
}

以及一个存储和管理用户会话的 UserContext 类

   public class UserContext
   {
         public SiteUser SiteUser { get; internal set; }

         public static UserContext Current
         {
                get
                {
                    if (HttpContext.Current == null || HttpContext.Current.Session == null)
                        return null;

                    if (HttpContext.Current.Session["UserContext"] == null)
                        CreateUserContext();

                    return (UserContext)HttpContext.Current.Session["UserContext"];
                }
            }
    }

现在,每当我必须显示日期时,无论是在网格中还是在文本字段中,我总是希望引用DateFormatSiteUser 对象的属性。

在我看到的大多数示例中,数据注释用于定义日期格式,如下所示:

    [DataType(DataType.Date), DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
    public DateTime PasswordChangedOn { get; set; }

我尝试将其修改为:

[DataType(DataType.Date), DisplayFormat(DataFormatString = UserContext.Current.SiteUser.DateFormat, ApplyFormatInEditMode = true)]

但它没有用,给我一个错误,指出属性参数必须是一个常量。

那么在 MVC 应用程序中将日期格式设置为模型的最佳方法是什么?

4

1 回答 1

1

您可以在视图模型中添加一个属性并使用它来呈现日期,而不是考虑用户特定日期并在视图中呈现它,例如

public string PasswordChangedOnLocal
{
    get { return PasswordChangedOn.ToString(DateFormat); }
}

或者,您可以使用该DateFormat属性在视图本身中呈现日期。如果以后想更改它(例如,采用系统范围的约定),这实际上为您提供了更多的灵活性,因为您不需要重新编译站点,例如

@model SiteUser

...
<div id="passwordChangedOn">@Model.PasswordChangedOn.ToString(Model.DateFormat)</div>
...
于 2012-12-11T15:38:32.730 回答