问题描述
检查下面的代码。我正在使用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>
}