我以hh:mm dd/mm/yyyy
使用Razor语法,我可以使用
显示存储在DB中的日期@Html.DisplayFor(modelItem => item.Updated)
我希望Razor能够以下列格式显示dd MMM yyyy
所以我按照另一个StackOverflow回答尝试了以下内容:
@Html.DisplayFor(modelItem => item.Updated.ToString("dd MMM yyyy"))
Converting DateTime format using razor
然而,这会产生以下错误:
>应用程序中的服务器错误。模板只能用于字段访问,属性访问, 单维数组索引或单参数自定义索引器 表达式。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.InvalidOperationException:模板可以 仅用于字段访问,属性访问,单维数组 索引或单参数自定义索引器表达式。
来源错误:
第36行:第37行:第38行:
@ Html.DisplayFor(modelItem => item.Updated.ToString(“dd MMM yyyy”)) 第39行:第40行:
我正在处理ASP.NET等...我不确定如何创建一个视图模型来尝试这个例子,因为我首先使用自动生成的edmx文件构建数据库:
[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
pubilc DateTime Updated { get; set }
有什么建议吗?
目前这些工作。我想做的就是更改'updated'属性的显示格式。 我的观点文件: http://pastebin.com/Ywn8Z0TV
我的控制器: http://pastebin.com/1jAih6AE
我的模特: http://pastebin.com/UC61QjFZ
更新:对于那些说明应该是item =>的人item.Updated ...
Error 1 A local variable named 'item' cannot be declared in this scope because it would give a different meaning to 'item', which is already used in a 'parent or current' scope to denote something else
答案 0 :(得分:2)
试试这个:
[DisplayFormat(DataFormatString = "{0:dd MM yyyy}", ApplyFormatInEditMode = true)]
[DataType(DataType.Date)]
public DateTime Updated { get; set; }
答案 1 :(得分:2)
具体说明解决方案不起作用的原因与错误状态完全相同。
模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。
所以ToString()
是一种方法,不适用于模板。
其他人已经提供了替代解决方案,我想解释为什么你的工作不起作用。
我正在处理ASP.NET等...我不知道如何创建一个视图模型来尝试这个例子,因为我首先使用自动生成的edmx文件构建数据库
您的edmx文件应该创建一个看起来类似的类:
public partial class SomeTable
{
public DateTime Updated { get; set }
}
在同一个项目中,在相同的NameSpace(不一定是目录)中创建一个名为SomeTable.Partial.cs
的文件,它看起来也很相似:
public partial class SomeTable
{
[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
pubilc DateTime Updated { get; set }
}
实体框架默认创建Partial Classes,代表您选择的表格。这意味着您可以在另一个文件中定义另一个分部类,.Net会在编译时将每个属性的所有属性组合成一个属性。
<强>更新强>
这段代码对我来说很奇怪,我看不出它是如何工作的:
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Metal.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Currency.Code)
更新2
DisplayFor
用于显示模型的属性(并且仅显示模型上的属性)。当您枚举类型为IEnumerable<>
的模型(或模型上的属性)时,您无法再使用DisplayFor
来显示这些值。您应该使用Display
代替。例如,Metal.Name
上不存在IEnumerable
,它存在于IEnumerable
的元素中。
@foreach (var item in Model) {
<tr>
<td>
@Html.Display(item.Metal.Name)
</td>
<td>
@Html.Display(item.Currency.Code)
错误更新
错误1无法在此范围内声明名为“item”的局部变量,因为它会为'item'赋予不同的含义,'item'已在'parent或current'范围内用于表示其他内容
当代码存在时,如下所示:
@foreach (var item in Model) // or Model.Items
{
<div>
@Html.DisplayFor(item => item.Updated)
</div>
}
所有MVC EditFor
和DisplayFor
方法都使用Expression<TDelegate>
,因此当代码指出DisplayFor(item => item.Updated)
时,第一个item
基本上定义了变量T item
但是,您无法再次定义相同的变量名称。为了说明这不是特定于MVC的,这也不会编译并给出相同的错误(并且对于相同变量名的声明更明显):
var item = 1;
var items = new List<int>() { 1, 2, 3, 4};
var sameItem = items.Select(item => item == item);
答案 2 :(得分:0)
尝试以下方法。您似乎正在使用不正确的语法调用DisplayFor
方法。
@Html.DisplayFor(x => x.Updated)
使用lambdas时,您需要匹配=>
符号前后的符号名称。
您目前使用的modelItem
和item
不相同。