第一篇文章。
我正在ASP.NET MVC中创建一个数据库门户,以便人们访问我的数据库以获取列表 数据库,表格,大小等。
在我的视图中,我正在使用另一个foreach循环中的foreach循环遍历包含SQL TOP 100查询结果(数据行)的动态列表,该循环迭代SQL列标题列表;这部分工作正常。我遇到的问题是,对于任何DateTime结果,我想缩短它们。我一直在寻找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>
工作正常。但我希望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]。
提前致谢。
答案 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>