仅显示日期,没有时间

ZVe*_*nue 87 c# asp.net-mvc datetime asp.net-mvc-3

在MVC剃须刀中,我将当前日期放在数据库中,就像这样.

model.Returndate = DateTime.Now.Date.ToShortDateString();
Run Code Online (Sandbox Code Playgroud)

由于数据库字段是日期时间数据类型,并且我将当前日期转换为字符串格式,这不起作用..我该怎么做?我正在做字符串格式,因为我希望日期为mm/dd/yyyy格式而不是mm/dd/yyyy hh:mm:ss时间格式..

编辑:

在控制器中我有

var model = new ViewModel();
model.ReturnDate = DateTime.Now;            
return PartialView("PartialView", model);  
Run Code Online (Sandbox Code Playgroud)

在部分视图中,我有

@Html.EditorFor(model => model.Returndate)
Run Code Online (Sandbox Code Playgroud)

这是将日期显示为日期和时间的地方......我只想显示日期.不是时候.我希望这个编辑更好地解释.

小智 125

只需要自己处理这个场景 - 找到一个非常简单的方法来做到这一点,只需在模型中注释你的属性,如下所示:

[DataType(DataType.Date)]
public DateTime? SomeDateProperty { get; set; }
Run Code Online (Sandbox Code Playgroud)

它也会隐藏日期选择器中的时间按钮.

对不起,如果这个答案有点晚了;)

  • 这个解决方案对我不起作用. (6认同)
  • 正是我所需要的。优秀! (2认同)
  • 没有必要为迟到道歉,发布旧问题的答案对于非OP的人来说可能是一个很大的帮助.这是我正在寻找的答案,因为我知道这是可能的但是不记得是怎么回事,并且你在3年前发布了它.如果你有什么不可思议的早. (2认同)

Rus*_*rke 94

如果列类型是SQL中的DateTime,那么它将存储您传递或不传递的时间.

最好妥善保存日期:

model.ReturnDate = DateTime.Now;
Run Code Online (Sandbox Code Playgroud)

然后在需要显示时格式化它:

@Html.Label(Model.ReturnDate.ToShortDateString())
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用的是EditorFor:

@Html.EditorFor(model => model.ReturnDate.ToShortDateString())
Run Code Online (Sandbox Code Playgroud)

要么

@Html.EditorFor(model => model.ReturnDate.ToString("MM/dd/yyyy"))
Run Code Online (Sandbox Code Playgroud)

要向模型添加属性,请添加以下代码:

public string ReturnDateForDisplay
{
    get
    {
       return this.ReturnDate.ToString("d");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在PartialView中:

@Html.EditorFor(model => model.ReturnDateForDisplay)
Run Code Online (Sandbox Code Playgroud)

编辑:

嗨,大家好,只想澄清这个答案我的说法'如果你正在使用EditorFor',那就意味着你需要有一个EditorFor模板来表示你想要代表的值类型.

编辑器模板是管理MVC中重复控件的一种很酷的方法:

http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/

您可以将它们用于像String这样的天真类型,就像我上面所做的那样; 但它们特别适合让您为更复杂的数据类型模拟一组输入字段.

  • 你应该从答案中删除'@ Html.EditorFor(model => model.ReturnDate.ToShortDateString())'因为这不起作用. (19认同)
  • @Russ:你做的编辑器更新没有用.它给了我一个错误"模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式." (14认同)

Bri*_*rij 39

如果要在TextBox中显示,则此方法有效:

@Html.TextBoxFor(m => m.Employee.DOB, "{0:dd-MM-yyyy}")
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 16

日期库中的日期/时间根本不是格式化版本.它只是日期/时间本身.从数据库中提取值时,如何显示该日期/时间是另一回事.我强烈怀疑你真的只是想要:

model.Returndate = DateTime.Now.Date;
Run Code Online (Sandbox Code Playgroud)

或者可能

model.Returndate = DateTime.UtcNow.Date;
Run Code Online (Sandbox Code Playgroud)

是的,如果你看一下使用SQL Server Studio或任何数据库,你现在看到的午夜-但是这无关紧要,当你取的日期从数据库中,并显示给用户,那么你可以申请相关的格式.

编辑:关于您编辑的问题,问题不在于模型 - 它是您指定视图的方式.你应该使用类似的东西:

@Html.EditorFor(model => model.Returndate.Date.ToString("d"))
Run Code Online (Sandbox Code Playgroud)

短日期模式d标准日期和时间格式说明符在哪里(这意味着它将考虑当前的文化设置).

这就是我反复说过的一点 - 当你向用户显示日期/时间时,就是把它格式化为没有时间的日期的时候.

编辑:如果这不起作用,应该有一种方式用格式字符串装饰模型或视图 - 或类似的东西.我不是一个真正的MVC人,但感觉应该有一个很好的方式来做这个声明性的...

  • @Jon:当我使用html.editorfor的编辑代码时,我收到此错误."模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式". ......在运行时间 (2认同)

小智 8

您可以修改ViewModel,如下所示:

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}",ApplyFormatInEditMode = true)]
Run Code Online (Sandbox Code Playgroud)


Jal*_*aid 7

您可以使用应用自定义日期时间格式 ToString,如:

DateTime.Now.Date.ToString("MM/dd/yyyy");
Run Code Online (Sandbox Code Playgroud)

DateTime.ToString可以在这里这里找到关于格式模式的进一步阅读.

编辑:在您的问题编辑之后,就像其他建议您应该在您的视图中应用日期格式:

model.Returndate = DateTime.Now.Date;

@Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy"))
Run Code Online (Sandbox Code Playgroud)


Apo*_*llo 5

如果你有一个如下所示的 for 循环。

@item.StartDate更改为@item.StartDate.Value.ToShortDateString()

这将删除时间,以防万一您无法像我的情况一样在模型中注释您的属性。

<table>
  <tr>
   <th>Type</th>
   <th>Start Date</th>
  </tr>
    @foreach (var item in Model.TestList) {
      <tr>
        <td>@item.TypeName</td>
        <td>@item.StartDate.Value.ToShortDateString()</td>
      </tr>
      }
</table>
Run Code Online (Sandbox Code Playgroud)