【问题标题】:Change datetime to date in MVC 3 C#在 MVC 3 C# 中将日期时间更改为日期
【发布时间】:2011-04-14 20:14:03
【问题描述】:

我在 C# 中使用 MVC 3,但在下拉列表中显示日期时出现问题。 日期显示如下:4/21/2011 12:00:00 AM,但我只想这样格式化它们:4/21/2011,即正是我数据库中的格式。

数据库中的日期属性是日期而不是日期时间。

模型中的代码:

[DisplayFormat(DataFormatString = "{mm/dd/yyyy}", ApplyFormatInEditMode=false)]
public DateTime? booksDate { get; set; }

控制器如下所示:

 var booksDates = from dates in db.Books
                             orderby dates.booksDate
                             select new { dates.booksDate};

          ViewBag.Dates = BooksDates.Distinct();

最后是我认为的代码:

<td>Books dates</td>
            <td>@Html.DropDownList("booksDate", new SelectList(ViewBag.Dates as System.Collections.IEnumerable, "booksDate", "booksDate"), "Select a date") </td>

我哪里错了?

谢谢

【问题讨论】:

  • livreDate 是从哪里来的?除了你的模型,我在其他任何地方都看不到它......
  • 嗨,乔恩,你是对的,在任何地方都提到了 livreDate,这只是一个糟糕的复制粘贴,但在我的真实代码中,它的 booksDate 不是 livreDate

标签: c# asp.net-mvc


【解决方案1】:

您可以尝试使用常规的 html 下拉菜单并手动设置 html 值。我确信有更好的方法,它可能很脏,但它可以完成工作。

控制器:

ViewBag.Dates = BooksDates.Distinct();

查看:

<select>
@foreach (var date in ViewBag.Dates)
{
    <option>
       @Convert.ToDateTime(date.StartDate).ToShortDateString()
    </option>

}
</select>

【讨论】:

  • 这个例子我用过,dd/MM/yyyy格式here,谢谢大家
【解决方案2】:

如果我没有完全离开 DataFormatString 应该是这样的:

DataFormatString = "{0:MM/dd/yyyy}"

使用短日期格式甚至更简单:

DataFormatString="{0:d}"

【讨论】:

  • 我已经尝试过了,但我总是有这种格式:4/21/2011 12:00:00 AM 而我想要这种格式:4/21/2011
【解决方案3】:

您可以扩展帮助程序类以在视图中完成工作。

public static class FormatHelper
{
    public static IHtmlString ToDate( this HtmlHelper helper, DateTime datetime )
    {
        return new HtmlString( datetime.ToShortDateString() );
    }
}

在视图中:

@Html.ToDate( Model.Date )

别忘了导入命名空间来查看。

【讨论】:

    【解决方案4】:

    就像 在控制器中:

    ViewBag.Date = Convert.ToDateTime(SelectedDate);
    

    在视图中

    @Convert.ToDateTime(ViewData["Date"].ToString()).ToShortDateString()
    

    输出如下:

    2017 年 3 月 2 日

    【讨论】:

      【解决方案5】:

      您可以在纯 c# 上通过以下方式实现:

      string date = Convert.ToDateTime(date).ToShortDateString();
      

      【讨论】:

      • 嗨,Eric,我知道我可以在纯 c# 中做到这一点,但究竟在哪里以及如何做呢?因为我必须在我的模型、控制器或视图(下拉列表)中执行此操作。换句话说,我必须尊重 MVC 架构
      【解决方案6】:

      如果你使用的是sql,你可以这样做:

      select field1, convert(nvarchar(10), field2, 101) 
      

      从表中 //无论在哪里,

      让我解释一下这一切:

      -field2 是包含日期的字段。 -nvarchar(10) 是您将审查的类型。这并不重要,因为它是您正在接收的类型(转换的结果)。就像它是一个选择一样,你不关心这里的数据类型。它仅用于显示数据。数字 10 是你得到的字符串的长度。

      -field2:

      您要转换的字段(带小时的日期)

      101:就是风格。 这告诉 field2 必须只打印月/日/年。

      有很多款式,你应该谷歌他们!

      我希望它有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-26
        • 1970-01-01
        • 2015-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-03
        相关资源
        最近更新 更多