2016-10-02 86 views
-1

我有一個控制器,回短信MVC視圖拋出一個錯誤

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項目。任何幫助將不勝感激。

+0

我爲模型聲明: @model Princelys.Models.ViewClass –

+0

的信息是自我解釋。你將'List '傳遞給期望單個'ViewClass'的視圖。更改一個或另一個以使它們匹配 –

+1

您沒有提供足夠的有關您的視圖渲染的信息,但是我懷疑您的方法需要是'public ViewClass GetMessages()',它包含'return myViewList;'(不'返回myViewList。 myMessage;') –

回答

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

基於OP的代碼,它可能是另一種方式 - 控制器應該返回'ViewClass' :) –

+0

我發佈該編輯.. :) –

+0

請參閱我對問題和OP的迴應的評論。建議你編輯它,以便它可以被接受 –

0

你傳遞一個列表的視圖,但你的觀點是強類型到該列表中的單個成員。試着在你的模型改變這樣的:

@model List<ViewClass>