我创建了一个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; }
}
答案 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数据是错误的。