0

我正在使用 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
(...)

但是在 CheckBoxFor 行中,在 lambda 中,我的 MyBoolean1 无法识别。为什么?

第一次尝试:

好像换了

@model MyProject.SampleModel.MyCustomModel 

和:

@using MyProject.SampleModel 

没有编译错误,但在运行时出现错误:

Compiler Error Message: CS1963: An expression tree may not contain a dynamic operation
4

1 回答 1

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>
}
于 2013-09-20T19:40:06.693 回答