在MVC 3 C#中将日期时间更改为日期

4

我正在使用C#的MVC 3,并在下拉列表中显示日期时遇到了问题。

日期的显示格式为4/21/2011 12:00:00 AM,但我希望将它们格式化为4/21/2011,这正是我的数据库中的日期格式。

数据库中的日期属性是date而不是datetime。

模型中的代码:

[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>

我错在哪里了?

谢谢


2
livreDate 是从哪里来的?除了你的模型之外,我看不到它被提到过... - Jon Skeet
嗨jon,你是对的,livreDate没有被提及到任何地方,这只是一个糟糕的复制粘贴,但在我的真实代码中,它是booksDate而不是livreDate。 - user708683
6个回答

5
你可以尝试使用普通的HTML下拉框,并手动设置HTML值。我相信还有更好的方法,但这种方法虽然不太规范,但可以完成工作。
控制器:
ViewBag.Dates = BooksDates.Distinct();

浏览:

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

}
</select>

我已经使用了这个例子,用于dd/MM/yyyy格式在这里,谢谢大家。 - Shaiju T

0

你可以扩展辅助类在视图中完成这项工作。

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

在视图中:

@Html.ToDate( Model.Date )

不要忘记导入命名空间以查看。

0

如果我没有完全错,DataFormatString 应该长成这样:

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

或者更简单的使用短日期格式:

DataFormatString="{0:d}"

1
我已经尝试过这个,但是我总是得到这种格式:4/21/2011 12:00:00 AM,而我想要的格式是:4/21/2011。 - user708683

0

就像在控制器中一样:

ViewBag.Date = Convert.ToDateTime(SelectedDate);

在视图中

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

输出如下:

2017年03月02日


-1
如果您正在使用SQL,可以这样做:
select field1, convert(nvarchar(10), field2, 101) 

从表格中 where //无论什么,

让我解释一下这是关于什么的:

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

-field2:

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

101:这是样式。 这告诉field2只打印月/日/年。

有很多样式,您应该谷歌它们!

我希望它能起作用。


-1

你可以通过纯C#来实现它:

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

1
嗨,Eric,我知道我可以在纯C#中做到这一点,但具体在哪里和如何做呢?因为我必须在我的模型、控制器或视图(下拉列表)中完成它。换句话说,我必须遵守MVC架构。 - user708683

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接