循环在剃刀的模型视图

时间:2013-07-18 14:18:07

标签: 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(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。如何在ViewModel中找到我的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; }
}

1 个答案:

答案 0 :(得分:3)

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

ViewModel类

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)

你需要在代码中玩一下,因为我怀疑我第一次拥有属性名称/动作方法名称是正确的,但我希望你能得到基本的想法。创建视图文件使用的viewmodel类,并将联系人详细信息转储到List中。这会让你更容易。

编辑:

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

您使用的是Entity Framework还是Linq2SQL?忽略我关于viewmodel appraoch的答案,你的实际问题是LINQ相关的。尝试迭代ActionMethod中的联系人列表,例如。

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

    // ....    
}

如果你这里仍然有问题,那么你的LINQ数据是错误的。