Asp.net mvc 从视图中访问自定义模型

Asp.net mvc 从视图中访问自定义模型,asp.net-mvc,asp.net-mvc-4,razor,Asp.net Mvc,Asp.net Mvc 4,Razor,我正在使用asp.NETMVC4和razor语法。我有一个定制模型,想象一下: namespace MyProject.SampleModel { public class MyCustomModel { public bool MyBoolean1 { get; set; } public bool MyBoolean2 { get; set; } } } 因此,从视图中,在标题中,我执行以下操作: @model MyProject.S

我正在使用asp.NETMVC4和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
(...)
与:

没有编译错误,但在运行时引发错误:

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

@using MyProject.SampleModel 

如错误所述,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>
}
@foreach(Model.BoolValues中的变量项)
{
@项目1.Myboolean1
}
@foreach(Model.Names中的变量项)
{
@item.FistName
}

在运行时,下面的错误是由您所说的操作引起的:编译器错误消息:CS0118:“MyProject.SampleModel”是一个“名称空间”,但被用作“类型”,我没有意识到您引用的是名称空间而不是类,只是看到了
使用
模型
的错误。为了更好地理解,我编辑了我的答案。如果我删除了这一行,名称空间和作为@model MyCustomModel导入到视图中,那么就可以工作了。这里的问题是,假设我有另一个自定义模型,我也想导入:问题是你不能导入多个模型…现在我有这个问题。是的,你可以。您需要的是一个
ViewModel
,只需通过谷歌搜索它或使用此处的一个问题作为参考。我将编辑我的答案,为您提供一个快速提示,不要在一个视图中单独使用两个模型。按照我的说明构建ViewModel并使用ViewModel。
public class ExampleViewModel
{
    public MyCustomModel BoolValues { get; set; }
    public SecondModel Names { get; set; }
}
@model MyProject.SampleModel.ExampleViewModel
@foreach (var item in Model.BoolValues)
{
    <div>@item.Myboolean1</div>
}

@foreach (var item in Model.Names)
{
    <div>@item.FistName</div>
}