0

我创建了剃刀表单,@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是该 ViewModel 的一部分,但我似乎无法在模型中引用它。

我可以做这个:

@foreach (var item in Model ) {
     @Html.DisplayFor(modelItem => item.SupportContact.Contact)

但是当它实际尝试处理我的cshtml时,我会得到上面的错误。我试图这样做:

@foreach (MyProject.Models.SupportContact item in Model ) {}

但我无法通过模型深入了解 SupportContacts。如何SupportContact在我的 ViewModel 中进入我的班级?

谢谢

编辑:

这是 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; }
}
4

1 回答 1

3

在您的情况下,我会专门为该视图创建一个视图模型并像这样设置它

视图模型类

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

控制器

public ActionResult Index()
{
    var viewModel = new IndexViewModel();
    viewModel.SupportContacts = IQueryableListOfContacts.ToList();

    return View(viewModel)
}

看法

@model IndexViewModel
@foreach (var contact in Model.SupportContacts) {
     @Html.DisplayFor(_ => contact.Contact)

您需要对代码进行一些操作,因为我怀疑我第一次没有正确的属性名称/操作方法名称,但我希望您了解基本概念。创建视图文件使用的视图模型类,并将联系人详细信息转储到列表中。这会让你更容易。

编辑:

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

您使用的是实体框架还是 Linq2SQL?忽略我对视图模型方法的回答,您的实际问题与 LINQ 相关。尝试在 ActionMethod 中迭代联系人列表,例如

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

    // ....    
}

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

于 2013-07-18T14:24:00.553 回答