Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DisplayFor的IEnumerable类型视图模型的Razor语法_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# DisplayFor的IEnumerable类型视图模型的Razor语法

C# DisplayFor的IEnumerable类型视图模型的Razor语法,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我正在以hh:mm-dd/mm/yyyy格式从SQL db中提取日期时间 使用Razor语法,我可以使用 @Html.DisplayFor(modelItem => item.Updated) 我希望Razor以以下格式显示dd MMM yyyy,因此我根据另一个StackOverflow答案尝试了以下内容: @Html.DisplayFor(modelItem => item.Updated.ToString("dd MMM yyyy")) 但是,这会产生以下错误: “/”应用

我正在以hh:mm-dd/mm/yyyy格式从SQL db中提取日期时间

使用Razor语法,我可以使用

@Html.DisplayFor(modelItem => item.Updated)
我希望Razor以以下格式显示dd MMM yyyy,因此我根据另一个StackOverflow答案尝试了以下内容:

@Html.DisplayFor(modelItem => item.Updated.ToString("dd MMM yyyy"))
但是,这会产生以下错误:

“/”应用程序中出现服务器错误

模板只能与字段访问、属性访问、, 一维数组索引或单参数自定义索引器 表情

描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源

异常详细信息:System.InvalidOperationException:模板可以是 仅用于字段访问、属性访问、一维数组 索引,或单参数自定义索引器表达式

源错误:

第36行:第37行:第38行: @Html.DisplayFormodelItem=>item.Updated.toString MMM yyyy 第39行:第40行:

我刚刚开始学习ASP.NET等。。。我不确定如何创建视图模型来尝试此示例,因为我首先使用自动生成的edmx文件构建DB:

[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")] 
pubilc DateTime Updated { get; set } 
有什么建议吗

这些措施目前正在发挥作用。我只想更改“updated”属性的显示格式。 我的视图文件:

我的控制器:

我的模型:

更新:对于那些声明应该是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

尝试以下方法。似乎您正在使用不正确的语法调用DisplayFor方法

@Html.DisplayFor(x => x.Updated)
使用lambdas时,需要匹配=>符号前后的符号名称


您当前使用的modelItem和item不同。

请尝试以下操作。似乎您正在使用不正确的语法调用DisplayFor方法

@Html.DisplayFor(x => x.Updated)
使用lambdas时,需要匹配=>符号前后的符号名称

您当前使用的modelItem和item不同。

请尝试以下操作:

[DisplayFormat(DataFormatString = "{0:dd MM yyyy}", ApplyFormatInEditMode = true)]
[DataType(DataType.Date)]
public DateTime Updated { get; set; }
试试这个:

[DisplayFormat(DataFormatString = "{0:dd MM yyyy}", ApplyFormatInEditMode = true)]
[DataType(DataType.Date)]
public DateTime Updated { get; set; }

具体来说,解决方案不起作用的原因与错误状态完全相同

模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式

所以ToString是一种方法,不适用于模板

其他人已经给出了另一种解决方案,我想解释一下为什么你的方案不起作用

我刚刚开始学习ASP.NET等。。。我不确定如何创建视图模型来尝试这个示例,因为我首先使用自动生成的edmx文件构建DB

您的edmx文件应该创建一个类似的类:

public partial class SomeTable
{
  public DateTime Updated { get; set } 
}
public partial class SomeTable
{
  [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")] 
  pubilc DateTime Updated { get; set } 
}
在同一项目中,在同一命名空间(不一定是目录)中创建一个名为SomeTable.Partial.cs的文件,该文件看起来也类似:

public partial class SomeTable
{
  public DateTime Updated { get; set } 
}
public partial class SomeTable
{
  [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")] 
  pubilc DateTime Updated { get; set } 
}
默认情况下,实体框架将创建表示所选表的实体。这意味着您可以在另一个文件中定义另一个分部类,.Net将在编译时将每个属性上的所有属性合并为一个属性

更新

这段代码在我看来很奇怪,我不知道它怎么可能工作:

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Metal.Name)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Currency.Code)
错误更新

错误1无法在此作用域中声明名为“item”的局部变量,因为它将赋予“item”不同的含义,而“item”已在“父或当前”作用域中用于表示其他内容

当代码存在时,如下所示:

@foreach (var item in Model) // or Model.Items
{
  <div>
  @Html.DisplayFor(item => item.Updated)
  </div>
}

具体来说,解决方案不起作用的原因与错误状态完全相同

模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式

所以ToString是一种方法,不适用于模板

其他人已经给出了另一种解决方案,我想解释一下为什么你的方案不起作用

我刚刚开始学习ASP.NET等。。。我不确定如何创建视图模型来尝试这个示例,因为我首先使用自动生成的edmx文件构建DB

您的edmx文件应该创建一个类似的类:

public partial class SomeTable
{
  public DateTime Updated { get; set } 
}
public partial class SomeTable
{
  [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")] 
  pubilc DateTime Updated { get; set } 
}
在同一项目中,在同一命名空间(不一定是目录)中创建一个名为SomeTable.Partial.cs的文件,该文件看起来也类似:

public partial class SomeTable
{
  public DateTime Updated { get; set } 
}
public partial class SomeTable
{
  [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")] 
  pubilc DateTime Updated { get; set } 
}
默认情况下,实体框架将创建表示所选表的实体。这意味着您可以在另一个文件中定义另一个分部类,.Net将在编译时将每个属性上的所有属性合并为一个属性

更新

这段代码在我看来很奇怪,我不知道它怎么可能工作:

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Metal.Name)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Currency.Code)
错误更新

错误1无法在此作用域中声明名为“item”的局部变量,因为它将赋予“item”不同的含义,而“item”已在“父或当前”作用域中用于表示其他内容< /p> 当代码存在时,如下所示:

@foreach (var item in Model) // or Model.Items
{
  <div>
  @Html.DisplayFor(item => item.Updated)
  </div>
}


您的lambda表达式的形式都是modelItem=>item.[…]。您不应该在RHS上使用modelItem吗?您好,modelItem=>modelItem不起作用。modelItem=>item是搭建的。它与modelItem=>item一起工作。我只需要更改显示格式,这听起来很奇怪-item在那个时候指的是什么变量?你能编辑你的帖子并显示@model,@model使用的类定义吗?脚手架中发生了一些不寻常的事情。@Erik-我已经通过上面的pastebin包含了模型、视图和控制器。感谢您的lambda表达式都是modelItem=>item.[…]形式。您不应该在RHS上使用modelItem吗?您好,modelItem=>modelItem不起作用。modelItem=>item是搭建的。它与modelItem=>item一起工作。我只需要更改显示格式,这听起来很奇怪-item在那个时候指的是什么变量?你能编辑你的帖子并显示@model,@model使用的类定义吗?脚手架中发生了一些不寻常的事情。@Erik-我已经通过上面的pastebin包含了模型、视图和控制器。感谢她已经这样做了,它在显示数据时使用默认的日期时间格式。不过,他需要一种不同的格式。然后他应该用他实际使用的代码更新他的问题。他在问题的顶部显示了准确的Html.DisplayFor。然后在它的正下方,显示了他试图做但没有成功的事情。所以他尝试的两种解决方案都不起作用,他正在寻求帮助。啊,modelItem/item。是的,但当他把代码放在问题中时,这似乎是一个错误,因为他说它显示的是日期时间。仍然给他留下了使用错误格式的问题。谢谢格罗默。。。你明白了。。。modelItem=>modelItem不工作。modelItem=>item是搭建的。它与modelItem=>item一起工作。我只需要更改显示格式,他已经这样做了,在显示数据时使用默认的日期时间格式。不过,他需要一种不同的格式。然后他应该用他实际使用的代码更新他的问题。他在问题的顶部显示了准确的Html.DisplayFor。然后在它的正下方,显示了他试图做但没有成功的事情。所以他尝试的两种解决方案都不起作用,他正在寻求帮助。啊,modelItem/item。是的,但当他把代码放在问题中时,这似乎是一个错误,因为他说它显示的是日期时间。仍然给他留下了使用错误格式的问题。谢谢格罗默。。。你明白了。。。modelItem=>modelItem不工作。modelItem=>item是搭建的。它与modelItem=>item一起工作。我只需要更改显示格式谢谢,但是当我首先使用自动生成的DB模型创建DB时,如何为此创建viewModel?您的模型类是由LINQ、Entity Framework等自动生成的吗?如果是,那么这些是部分类。您可以添加自己的分部类来扩展DB生成的类,并将MetadataType注释附加到此类,并严格为模型的元数据创建类。这是一直在做的。请参阅此链接以获取示例:谢谢,但当我使用自动生成的DB模型首先创建DB时,如何为此创建viewModel?您的模型类是否由LINQ、Entity Framework等自动生成?如果是,那么这些是部分类。您可以添加自己的分部类来扩展DB生成的类,并将MetadataType注释附加到此类,并严格为模型的元数据创建类。这是一直在做的。请参阅此链接以获取示例:Hi Erik。。。这是非常奇怪的,并没有帮助我学习ASP.NET!!!我向你保证它是有效的。更重要的是,我所有的index.cshtml视图都是这样构建的…'modelItem=>item.Property'。架子工显示标签的方式有所不同,尽管…'@Html.DisplayNameFormodel=>model.Category.Name@Html.DisplayNameFormodel=>model.Metal.Name@Html.DisplayNameFormodel=>model.Name'如果我改成你说的样子,它应该是。。。错误1无法在此范围内声明名为“item”的局部变量,因为它将赋予“item”不同的含义,而“item”已在“父级或当前”范围内使用,用于表示其他内容,使用数据注释表示分部类-这是我正在使用的一种方法,迄今为止似乎是一个成功的解决方案。这篇博文与讨论相关,有助于加深我对Hi Erik。。。这是非常奇怪的,并没有帮助我学习ASP.NET!!!我向你保证它是有效的。更重要的是,我所有的index.cshtml视图都是这样构建的…'modelItem=>item.Property'。架子工显示标签的方式有所不同,尽管…'@Html.DisplayNameFormodel=>model.Category.Name@Html
.DisplayNameFormodel=>model.Metal.Name@Html.DisplayNameFormodel=>model.Name'如果我更改为您所说的,它应该是这样的。。。错误1无法在此范围内声明名为“item”的局部变量,因为它将赋予“item”不同的含义,而“item”已在“父级或当前”范围内使用,用于表示其他内容,使用数据注释表示分部类-这是我正在使用的一种方法,迄今为止似乎是一个成功的解决方案。这篇博文与讨论相关,有助于加深我的理解