MVC视图抛出错误

时间:2016-10-02 06:06:53

标签: c# asp.net-mvc entity-framework asp.net-mvc-5

我有一个返回消息列表的控制器

public ActionResult MainMenu()
{
    var myDataOp = new DataBaseOperations();
    var Message=myDataOp.GetMessages();
    return View(Message);
}

这是获取列表的函数

public List<ViewClass> GetMessages()
{
    PrincelysDataContext pData = new PrincelysDataContext();
    Princelys.Models.ViewClass myViewList =new ViewClass();
    var myMessage =from r in pData.Messages select r;
    DateTime presentTime = new DateTime();
    foreach (var myValues in myMessage)
    {
        myViewList.myMessage.Add(new ViewClass
        {
            CreatedName ="ffff",// (from m in pData.Users where m.userid == myValues.createdBy select m.userName).Single(),
            Messages = myValues.Message,
            CreateOn = myValues.createddatetime.Subtract(presentTime)
        });
    }
    return myViewList.myMessage;
}

然后我在视图页面中使用我的列表。

@model Princelys.Models.ViewClass
....
@foreach (var messageValues in Model.myMessage)
{
    <li class="left clearfix">
        <span class="chat-img pull-left">
            <img src="http://placehold.it/80/30a5ff/fff" alt="User Avatar" class="img-circle" />
        </span>
        <div class="chat-body clearfix">
            <div class="header">
                <strong class="primary-font">@messageValues.CreatedName</strong> <small class="text-muted">@messageValues.CreateOn.TotalHours mins ago</small>
            </div>
            <p>
                @messageValues.Messages
            </p>
        </div>
    </li>

}

在浏览器上运行视图页面时出现错误

  

传递到字典中的模型项的类型为'System.Collections.Generic.List`1 [Princelys.Models.ViewClass]',但此字典需要类型为'Princelys.Models.ViewClass'的模型项。< / p>

这是包含属性的类

public class ViewClass
{
    public ViewClass()
    { myMessage = new List<ViewClass>(); }
    public string CreatedName { get; set; }
    public string Messages { get; set; }
    public TimeSpan CreateOn { get; set; }       
    public List<ViewClass> myMessage;
}

这是我的第一个MVC 5项目。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您正在控制器操作中返回List<ViewClass>,但看起来您的视图是使用ViewClass强列入的。将其更改为@model IEnumerable<ViewClass>或其他方式,即从控制器返回ViewClas

根据评论,问题GetMessages应该返回ViewClass,所以它应该如下所示

public ViewClass GetMessages()
{
    PrincelysDataContext pData = new PrincelysDataContext();
    Princelys.Models.ViewClass myViewList =new ViewClass();
    var myMessage =from r in pData.Messages select r;
    DateTime presentTime = new DateTime();
    foreach (var myValues in myMessage)
    {
        myViewList.myMessage.Add(new ViewClass
        {
            CreatedName ="ffff",// (from m in pData.Users where m.userid == myValues.createdBy select m.userName).Single(),
            Messages = myValues.Message,
            CreateOn = myValues.createddatetime.Subtract(presentTime)
        });
    }
    return myViewList;
}

答案 1 :(得分:0)

您正在将一个List传递给视图,但您的视图强烈地键入该列表的单个成员。尝试在模型中更改此内容:

@model List<ViewClass>