C# razor中的模型视图循环

C# razor中的模型视图循环,c#,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,我已经创建了razor表单,它们执行@foreach循环模型并生成我的行。现在我试图在ViewModel上实现同样的功能,我得到了以下错误 Unable to create a constant value of type 'MyProject.Models.SupportContact'. Only primitive types or enumeration types are supported in this context. 我的@model正在作为IQueryable(MyPro

我已经创建了razor表单,它们执行
@foreach
循环模型并生成我的行。现在我试图在ViewModel上实现同样的功能,我得到了以下错误

Unable to create a constant value of type 'MyProject.Models.SupportContact'. 
Only primitive types or enumeration types are supported in this context.
我的@model正在作为
IQueryable(MyProject.Models.SupportContactFormView)
传入,
SupportContact
是该视图模型的一部分,但我似乎无法在模型中引用它

我可以这样做:

@foreach (var item in Model ) {
     @Html.DisplayFor(modelItem => item.SupportContact.Contact)
但是当它实际尝试处理我的cshtml时,我会得到上面的错误。我曾尝试:

@foreach (MyProject.Models.SupportContact item in Model ) {}
但我无法通过模型深入了解支持联系人。如何在ViewModel中访问my
SupportContact

谢谢

编辑:

以下是ViewModel声明:

public class SupportContactFormView
{
    public SupportContact SupportContact { get; private set; }
    public SelectList Priorities { get; private set; }
    public SelectList ContactTypes { get; private set; }
    public String Group_COde { get; private set; }
}

在您的情况下,我将专门为该视图创建一个viewmodel,并按如下方式进行设置

视图模型类

public class IndexViewModel
{
    public IList<SupportContact > SupportContacts { get; set; }
}
查看

@model IndexViewModel
@foreach (var contact in Model.SupportContacts) {
     @Html.DisplayFor(_ => contact.Contact)
您需要仔细研究一下代码,因为我怀疑我第一次使用的属性名称/操作方法名称是否正确,但我希望您了解基本的想法。创建视图文件使用的viewmodel类,并将联系人详细信息转储到列表中。那会让你更容易

编辑:

事实上,我想我搞错了。错误“无法创建'MyProject.Models.SupportContact'类型的常量值”。 在此上下文中仅支持基元类型或枚举类型。”表示LINQ数据有问题

您使用的是实体框架还是Linq2SQL?忽略我关于viewmodel appraoch的回答,您的实际问题与LINQ有关。尝试在ActionMethod中迭代联系人列表,例如

public ActionMethod Index()
{
    foreach (var contact in whateveryourcontactslistis) {
    }

    // ....    
}

如果您在这里仍然有问题,那么是您的LINQ数据出了问题。

在您的情况下,我会专门为该视图创建一个viewmodel,并将其设置为这样

视图模型类

public class IndexViewModel
{
    public IList<SupportContact > SupportContacts { get; set; }
}
查看

@model IndexViewModel
@foreach (var contact in Model.SupportContacts) {
     @Html.DisplayFor(_ => contact.Contact)
您需要仔细研究一下代码,因为我怀疑我第一次使用的属性名称/操作方法名称是否正确,但我希望您了解基本的想法。创建视图文件使用的viewmodel类,并将联系人详细信息转储到列表中。那会让你更容易

编辑:

事实上,我想我搞错了。错误“无法创建'MyProject.Models.SupportContact'类型的常量值”。 在此上下文中仅支持基元类型或枚举类型。”表示LINQ数据有问题

您使用的是实体框架还是Linq2SQL?忽略我关于viewmodel appraoch的回答,您的实际问题与LINQ有关。尝试在ActionMethod中迭代联系人列表,例如

public ActionMethod Index()
{
    foreach (var contact in whateveryourcontactslistis) {
    }

    // ....    
}


如果此处仍然存在问题,则是LINQ数据有问题。

是否为
联系人设置了显示模板
?显示您的
支持ContactFormView
code@EkoostikMartin:未设置显示模板。我已经为SupportContact controller生成了脚手架。@Limey-如果没有DisplayTemplate,为什么要使用
DisplayFor()
?@EkoostikMartin:这只是默认的脚手架。它在其他领域有效。也许VS制作了一个displayTemplate,但我不知道(我对MVC有点陌生)您是否为
联系人设置了displayTemplate
?显示您的
支持ContactFormView
code@EkoostikMartin:未设置显示模板。我已经为SupportContact controller生成了脚手架。@Limey-如果没有DisplayTemplate,为什么要使用
DisplayFor()
?@EkoostikMartin:这只是默认的脚手架。它在其他领域有效。也许VS制作了一个displayTemplate,我只是不知道(我对MVC有点陌生),但这不就等同于直接查询我的SupportContact并发送它吗?我需要能够拉取ViewModel,这样我就可以获得用于构建下拉列表的所有SelectList信息。出于某种原因,这种方式存在问题。尝试使用联系人列表,如果不起作用,请告诉我们任何例外情况,等等。好的,让我看看如何转换它。您在编辑时有点失去了我。所以我应该在ActionResult for Index中循环我的联系人,但是在循环中我应该如何处理它呢?只要搬到IList就行了?这肯定是我EF的问题。在数据发送到模型之前,我检查了数据,同时也得到了错误信息。需要进一步深入研究这个问题。但这难道不等于直接查询我的SupportContact并发送它吗?我需要能够拉取ViewModel,这样我就可以获得用于构建下拉列表的所有SelectList信息。出于某种原因,这种方式存在问题。尝试使用联系人列表,如果不起作用,请告诉我们任何例外情况,等等。好的,让我看看如何转换它。您在编辑时有点失去了我。所以我应该在ActionResult for Index中循环我的联系人,但是在循环中我应该如何处理它呢?只要搬到IList就行了?这肯定是我EF的问题。在数据发送到模型之前,我检查了数据,同时也得到了错误信息。我需要再深入一点。