【问题标题】:MVC view throws an errorMVC 视图抛出错误
【发布时间】:2016-10-02 06:06:53
【问题描述】:

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

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”的模型项。

这是保存属性的类

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 项目。任何帮助将不胜感激。

【问题讨论】:

  • 我对模型的声明是:@model Princelys.Models.ViewClass
  • 该消息是不言自明的。您将List&lt;ViewClass&gt; 传递到一个需要单个ViewClass 的视图。更改其中一个或另一个以使其匹配
  • 您没有提供有关视图呈现内容的足够信息,但我怀疑您的方法需要是 public ViewClass GetMessages(),其中包含 return myViewList;(而不是 return myViewList.myMessage;
  • 谢谢,你说的改变我的方法是正确的,节省了很多时间。谢谢斯蒂芬

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


【解决方案1】:

您在控制器操作中返回List&lt;ViewClass&gt;,但看起来您的视图是使用ViewClass 强类型化的。将其更改为 @model IEnumerable&lt;ViewClass&gt; 或其他方式,即从控制器返回 ViewClas

根据 cmets,问题是 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;
}

【讨论】:

  • 基于 OP 的代码,它可能反过来 - 控制器应该返回 ViewClass :)
  • 查看我的问题和 OP 的回复。建议您编辑此内容以便接受
【解决方案2】:

您正在将一个列表传递给视图,但您的视图被强类型化为该列表的单个成员。尝试在您的模型中更改此设置:

@model List<ViewClass>

【讨论】:

    猜你喜欢
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 2012-10-09
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    相关资源
    最近更新 更多