从视图中访问自定义模型

时间:2013-09-20 18:59:46

标签: asp.net-mvc asp.net-mvc-4 razor

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

1 个答案:

答案 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>
}