【问题标题】:Datetime formatting with editor template MVC使用编辑器模板 MVC 格式化日期时间
【发布时间】:2011-11-04 05:11:38
【问题描述】:

我想将显示在 TextBoxes 中的 DateTime 格式化为不带时间的格式:2011 年 1 月 1 日,而不是显示和编辑场景的默认 01/01/2011。

为了使用 datepicker,我已经在使用以下 DateTime 模板。我可以在此处包含格式吗?

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<System.DateTime?>" %>
<%: Html.TextBox("",ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line" }) %>

提前致谢。

【问题讨论】:

    标签: c# asp.net-mvc-2


    【解决方案1】:
    <%= Html.TextBox("",  Model.HasValue ? Model.Value.ToString("dd MMM, yyyy") : "", new { @class = "text-box single-line" }) %>
    

    或者在视图模型上更好:

    [DisplayFormat(DataFormatString = "{0:dd MMM, yyyy}", ApplyFormatInEditMode = true)]
    public DateTime? Foo { get; set; }
    

    【讨论】:

    • 我收到第一个错误:方法 .ToString 没有重载接受一个参数。我将不得不更改我的视图模型以使用第二个,所以我稍后会回来。
    • @Tsarl,哦,我没有注意到您使用的是可为空的 DateTime。在这种情况下,您将需要测试模型是否具有值,但我个人会推荐第二种方法。
    • 再次感谢达林。你和杰森都非常乐于助人,几乎同时给了我正确的答案。我将他的答案标记为已接受,只是因为他的声誉低于您:)
    • 我也有使用编辑器模板的日期格式,这对我不起作用。在这里发布stackoverflow.com/questions/18415653/…
    【解决方案2】:

    ViewData.TemplateInfo.FormattedModelValue 是日期时间对象吗?

    要从 DateTime 对象中获取您想要的格式,请使用以下命令:

    var now = DateTime.Now;
    var formattedDate = now.ToString("dd MMM, yyyy");
    

    这应该可以工作

    <%= 
    var theDate = Model.HasValue ? Model.Value.ToString("dd MMM, yyyy") : DateTime.Now.ToString("dd MMM, yyyy");
    
    
    Html.TextBox("", theDate, new { @class = "text-box single-line" }) %>
    

    调用Model.ToString("dd MMM, yyyy") 时出现错误的原因是因为它是一个Nullable 对象,并且它的ToString() 方法不接受任何参数。模型的值是一个 DateTime 对象,它接受参数。

    【讨论】:

    • 由于我使用的模板,我无法在视图中进行格式设置。
    • 可以在模板上设置值,然后在视图中输出吗?
    • 像达林建议的那样尝试过,但我收到了我在对他的解决方案的评论中提到的错误。
    猜你喜欢
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-27
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    相关资源
    最近更新 更多