我正在使用asp.net MVC 4和razor语法。我有一个自定义模型,想象一下:
namespace MyProject.SampleModel
{
public class MyCustomModel
{
public bool MyBoolean1 { get; set; }
public bool MyBoolean2 { get; set; }
}
}
所以从视图中,在标题中,我这样做:
@model MyProject.SampleModel.MyCustomModel
(...)
@Html.CheckBoxFor(m => m.MyBoolean1 ) <---- ERROR HERE: MyBoolean1 is not recognized
(...)
但是在RankBox中,在lambda中,我的MyBoolean1无法识别。为什么呢?
首次尝试:
似乎正在替换
@model MyProject.SampleModel.MyCustomModel
使用:
@using MyProject.SampleModel
没有编译错误,但在运行时会出现错误:
Compiler Error Message: CS1963: An expression tree may not contain a dynamic operation
答案 0 :(得分:1)
替换
@using MyProject.SampleModel
带
@model MyProject.SampleModel.MyCustomModel
如错误所述,lambda表达式不支持动态模型。通过定义模型,您可以强烈地键入它。
使用你的错误语句,你只引用一个命名空间,如果你从代码中删除你的lambda表达式,它本身就会工作,但你不会再有强类型视图。
亲切的问候
<强> //编辑:强>
我们发现,问题的核心是:如何在一个视图中使用2(3,4,5 ... n)模型。
让我们假设您有模型1:
public class MyCustomModel
{
public bool MyBoolean1 { get; set; }
public bool MyBoolean2 { get; set; }
}
模特2:
public class SecondModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
您需要创建一个结合这两个模型的第三个类。
public class ExampleViewModel
{
public MyCustomModel BoolValues { get; set; }
public SecondModel Names { get; set; }
}
现在,您只需将ExampleViewModel返回到控制器操作中的视图,然后使用
@model MyProject.SampleModel.ExampleViewModel
以这种方式访问您的媒体资源:
@foreach (var item in Model.BoolValues)
{
<div>@item.Myboolean1</div>
}
@foreach (var item in Model.Names)
{
<div>@item.FistName</div>
}