MVC:foreach循环给出System.Web.Mvc.WebViewPage <tmodel> .Model错误</tmodel>

时间:2014-07-06 15:29:44

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

在这里感到困惑。只想在构造函数中使用示例数据来显示一个字段,然后循环遍历一条记录:

public class MikesViewModel
{
    public MikesClass MikesClass { get; set; }

    public List<MikesClass> MikesClassList { get; set; }
}

public ActionResult MikesView()
{   
    var viewClassModel = new MikesViewModel();

    viewClassModel.MikesClass = new MikesClass();

    viewClassModel.MikesClassList = new List<MikesClass> { new MikesClass() {} };

    return View(viewClassModel);    
}

查看问题:如果我取出foreach @Html.DropDownListFor将不起作用:

@using AAA.Models    
@model MikesViewModel  


@Html.EditorFor(Model => Model.MikesClass.Name) 


@using (Html.BeginForm())
{

    @Html.DropDownListFor(model => model.MikesClass.Id, 
                          new SelectList(Model.MikesClassList, "Id", "Name"))

}

**** This foreach won't work if I take out the ^ above line ** :**

@foreach (var item in Model.MikesClassList)
{

@item.Name
}

奇怪的是,如果我拿出:

@Html.DropDownListFor(model => model.MikesClass.Id, new SelectList(Model.MikesClassList, "Id", "Name"))

@foreach (var item in Model.MikesClassList)不起作用并提供错误:

'Model' conflicts with the declaration 'System.Web.Mvc.WebViewPage<TModel>.Model'

我怎样才能让foreach工作?不理解这一点。

1 个答案:

答案 0 :(得分:1)

不要在视图中调用“模型”或“模型”。这可能会让视图引擎感到困惑。像这样的行,例如:

@Html.EditorFor(Model => Model.MikesClass.Name)

您在EditorFor中声明了一个名为Model的变量,但视图引擎中已有一个名为Model的内置变量。当你取消引用Model.MikesClass时你指的是哪一个?你在这里有另一个叫model的人:

@Html.DropDownListFor(model => model.MikesClass.Id, new SelectList(Model.MikesClassList, "Id", "Name"))

虽然Modelmodel不是C#中的保留字,但最好在视图中将它们视为“保留”。基本上,最好为变量使用有意义的名称,而不是过于通用的名称。

foreach工作正常,但该视图中的其他行已经混淆了引擎,当它到达foreach时它不知道该怎么做。