从_layout.cshtml访问模型属性时出现问题

问题描述

检查下面的代码。我正在使用c#mvc5并尝试从_Layout.cshtml遍历一个模型,但是当我尝试从模型AllModuleTypes访问MainLayoutData属性时,visual studio intellisense显示错误member cannot be accessed with an instance reference qualify it with a type name instead。我在做什么错?

型号:

public class MainLayoutData
{
    public static List<ModuleTypes> AllModuleTypes { get; set; } 
}

控制器:

public ActionResult Index()
{
    using (var ctx = new TestEntities())
    {
        var modTypes = ctx.ModuleTypes.ToList();
        var mainlayData = new MainLayoutData();
        MainLayoutData.AllModuleTypes = modTypes;

        return View(mainlayData);
    }
}

_Layout.cshtml:

@model TestProject.viewmodels.MainLayoutData

@foreach (var type in Model.AllModuleTypes)
{
    <option>@type.something</option>
}

解决方法

由于类仅导出public static属性,因此您将无法从实例访问它。使用@model指令时,您会在'Model'属性中获得该类的实例。而是使用@using <name-space-name>导入类所在的名称空间,然后可以直接访问静态属性MainLayoutData.AllModuleTypes

请考虑到您可能没有在该属性中设置值。在访问它之前,请确保您具有一个值或进行验证。

@using TestProject.TheClassNamespace

@foreach (var type in MainLayoutData.AllModuleTypes)
{
    <option>@type.something</option>
}