ASP.NET IDictionary 上的日期时间格式

本文关键字:日期 时间 格式 NET IDictionary ASP | 更新日期: 2023-09-27 18:35:52

第一篇文章。

我正在 ASP.NET MVC 中创建一个数据库门户,供访问我的数据库的人能够获取数据库、表格、大小等

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

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

这工作正常。但我想要任何@dict[col.COLUMN_NAME] 为日期时间的值,具有短日期格式。我使用 if 语句来过滤 DateTime 值(有效),但无法获得正确的语法来实际正确格式化日期。我已经根据这个网站的例子尝试了以下内容,但都失败了:

   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

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

提前谢谢。

ASP.NET IDictionary<T> 上的日期时间格式

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

这里发生了很多打字问题。我认为您的麻烦源于object打电话给ToString,而不是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>