2016-10-02 4 views
-1

ich einen Controller haben, die eine Liste der MeldungenMVC Ansicht wirft ein Fehler

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

Hier ist die Funktion zurück, die die Liste

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; 
} 

ich dann mit meiner Liste in der Ansicht Seite bekommt.

@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> 

}

Ich erhalte eine Fehlermeldung, wenn ich die Ansicht Seite in einem Browser laufen

Das Modellelement in das Wörterbuch übergeben ist vom Typ ‚System.Collections.Generic.List` 1 [Princelys.Models.ViewClass] ', aber für dieses Wörterbuch wird ein Modellelement vom Typ' Princelys.Models.ViewClass 'benötigt.

Dies ist die Klasse, die die Eigenschaften

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; 
} 

Dies ist mein erstes MVC 5 Projekt halten. Jede Hilfe würde sehr geschätzt werden.

+0

meine Erklärung für das Modell ist: @model Princelys.Models.ViewClass –

+0

Die Botschaft ist selbsterklärend. Sie übergeben 'List 'an eine Ansicht, die eine einzelne' ViewClass' erwartet. Ändern Sie das eine oder das andere so, dass sie übereinstimmen –

+1

Sie haben nicht genügend Informationen über die Darstellung Ihrer Ansicht angegeben, aber ich vermute, dass Ihre Methode 'public ViewClass GetMessages()' sein muss, die 'return myViewList;' (nicht 'return myViewList. myMessage; ') –

Antwort

1

Sie geben List<ViewClass> in Ihrer Controller-Aktion zurück, jedoch scheint Ihre Ansicht stark mit ViewClass getippt zu sein. Ändern Sie es in @model IEnumerable<ViewClass> Oder anders herum, d. H. Rückgabe ViewClas von Controller.

Basierend auf den Kommentaren ist die Frage GetMessages zurückkehren sollte ViewClass so sollte es wie

unten aussehen
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

Basierend auf OP-Code, ist es wahrscheinlich umgekehrt - der Controller sollte 'ViewClass' zurückgeben :) –

+0

Ich habe diese Änderung geschrieben .. :) –

+0

Siehe meine Kommentare zu der Frage und OP's Antwort. Schlage vor, dass du das editierst, damit es akzeptiert werden kann –

0

Sie eine Liste der Ansicht vorbei, aber Ihre Ansicht zu einem einzelnen Mitglied dieser Liste stark typisiert . Versuchen Sie dies in Ihrem Modell zu ändern:

@model List<ViewClass>