IDictionary <t>上的ASP.NET DateTime格式

时间:2016-02-24 03:08:37

标签: c# asp.net datetime

第一篇文章。

我正在ASP.NET MVC中创建一个数据库门户,以便人们访问我的数据库以获取列表 数据库,表格,大小等。

在我的视图中,我正在使用另一个foreach循环中的foreach循环遍历包含SQL TOP 100查询结果(数据行)的动态列表,该循环迭代SQL列标题列表;这部分工作正常。我遇到的问题是,对于任何DateTime结果,我想缩短它们。我一直在寻找2个小时,但解决方案并没有这样做。如果我只是引用@item我觉得它会起作用,但我认为IDictionary&lt;&gt;造成了麻烦。这是工作循环:

@foreach (dynamic item in Model.SampleData)
{
 IDictionary<string, object> dict = item;
 <tr>
 @foreach (var col in Model.Columns)
   { <td class="small">@dict[col.COLUMN_NAME]</td> }
 </tr>

工作正常。但我希望DateTime的任何@dict [col.COLUMN_NAME]值具有短日期格式。我使用if语句来过滤DateTime值(这是有效的),但无法获得正确的synatax来正确地格式化日期。我已根据本网站的示例尝试了以下内容,但都失败了:

   if (dict[col.COLUMN_NAME] is DateTime)
     <td>@dict[col.COLUMN_NAME].ToShortDateString()</td> //FAIL
     <td>@dict[col.COLUMN_NAME].ToString("dd/MM/yyyy")</td> //FAIL
     <td>@dict[col.COLUMN_NAME].Date.ToString("dd/MM/yyyy")</td> //FAIL

鉴于它是一个List,我没有[装饰]的模型属性。我想保持循环的方式,只是弄清楚如何格式化dict [col.COLUMN_NAME]。

提前致谢。

2 个答案:

答案 0 :(得分:2)

if (dict[col.COLUMN_NAME] is DateTime)
  <td>@(((DateTime)dict[col.COLUMN_NAME]).ToShortDateString())</td> 

答案 1 :(得分:0)

这里有很多打字问题。我认为你的问题源于ToString上的object,而不是DateTime我会纠正它...尝试这个:

@foreach (IDictionary<string, DateTime> dict in Model.SampleData)
{
 <tr>
 @foreach (var col in Model.Columns)
   { <td class="small">@dict[col.COLUMN_NAME].ToString("dd/MM/yyyy")</td> }
 </tr>

此处的关键是将您的字典更改为IDictionary<string, DateTime>。原因是object还定义了ToString方法,但不会为您设置日期格式。如果您更改字典的签名,那么您的索引器将返回DateTime而不是Object,并且将调用正确的ToString方法。

如果由于未显示的原因而无法使用此语法,则也可以使用强制转换来完成此操作。

@foreach (dynamic item in Model.SampleData)
{
 IDictionary<string, object> dict = item;
 <tr>
 @foreach (var col in Model.Columns)
   { <td class="small">@((DateTime) dict[col.COLUMN_NAME]).ToString("dd/MM/yyyy")</td> }
 </tr>