猿问

如何在ASP.NET MVC 3中以特定格式呈现DateTime?

如果我在模型类中有一个类型的属性,DateTime该如何以特定格式呈现它(例如,以ToLongDateString()返回格式)?


我已经尝试过了...


@Html.DisplayFor(modelItem => item.MyDateTime.ToLongDateString())

...这将引发异常,因为表达式必须指向属性或字段。和这个...


@{var val = item.MyDateTime.ToLongDateString();

  Html.DisplayFor(modelItem => val);

}

...这不会引发异常,但是呈现的输出为空(尽管val包含预期值,如我在调试器中看到的)。


提前感谢您的提示!


编辑


ToLongDateString仅是一个例子。我实际上想要使用的ToLongDateString是DateTimeand 的自定义扩展方法DateTime?:


public static string FormatDateTimeHideMidNight(this DateTime dateTime)

{

    if (dateTime.TimeOfDay == TimeSpan.Zero)

        return dateTime.ToString("d");

    else

        return dateTime.ToString("g");

}


public static string FormatDateTimeHideMidNight(this DateTime? dateTime)

{

    if (dateTime.HasValue)

        return dateTime.Value.FormatDateTimeHideMidNight();

    else

        return "";

}

因此,我认为我无法在ViewModel属性上使用DisplayFormat属性和DataFormatString参数。


胡子哥哥
浏览 614回答 3
3回答

猛跑小猪

如果所有DateTime类型的呈现方式都相同,则可以使用自定义DateTime显示模板。在您的Views文件夹中,在控制器特定的views文件夹下或“ Shared”文件夹下创建一个名为“ DisplayTemplates”的文件夹(这些工作类似于局部文件)。里面创建一个名为文件DateTime.cshtml是需要DateTime为@model您想如何使您的日期代码:@model System.DateTime@Model.ToLongDateString()现在,您可以在视图中使用它,它应该可以工作:@Html.DisplayFor(mod => mod.MyDateTime)只要您遵循将其添加到“ DisplayTemplates”文件夹并命名该文件以匹配要显示的类型的约定,MVC就会自动使用该文件来显示您的值。这也适用于使用“ EditorTemplates”编辑方案。
随时随地看视频慕课网APP
我要回答