2009-08-16 7 views
1

Je fais une application usign MVC et LINQ.LINQ, ASP.net mvc et joint

J'ai un contrôleur appelé la maison qui fait cela:

Dim notes = From x In dal.tbl_notes _ 
       Join y In dal.tbl_note_users On y.user_id Equals x.note_id _ 
       Select x.note, x.datestamp, y.is_owner, y.note_user_id 
    ViewData("notes") = notes 
    Return View() 

Et une page appelée accueil qui a ce code pour afficher la sortie:

<% For Each note In ViewData("notes")%> 
    <%=Html.Encode(note.ToString)%> 
<% next %> 

Cependant, la sortie ressemble à ceci:

{note = vbnv, datestamp =, is_owner = True, note_user_id = 1}

Comment puis-je générer des colonnes individuelles (comme une note ou une date)? Existe-t-il une meilleure façon de le faire?

J'ai essayé d'utiliser viewdata.model mais les données proviennent de deux tables différentes, donc je ne peux pas dire de quel type il s'agit.

Merci

Répondre

3

Créer une classe ViewModel qui contient le texte de la note, la date, isOwner booléen, et l'ID utilisateur.

Public Class NoteViewModel 
    public Note as String 
    public DateStamp as DateTime 
    public IsOwner as Boolean 
    public NoteUserID as Integer 
End Class 

Sélectionnez cette option en utilisant les valeurs de la jointure.

Dim notes = From x In dal.tbl_notes _ 
      Join y In dal.tbl_note_users On y.user_id Equals x.note_id _ 
      Select new NoteViewModel With { .Note = x.note, _ 
              .DateStamp = x.datestamp, _ 
              .Is Owner = y.is_owner, _ 
              .NoteUserId = y.note_user_id _ 
              } 
Return View(notes) 

Ensuite, faites que votre vue soit fortement typée avec le NoteViewModel. Ceci vous permettra de référencer Model.Note, etc.

<% For Each note In Model %> 
    <%= Html.Encode(note.Note) %> 
    <%= note.DateStamp.ToString("M/d/yyyy") %> 
    <%= IIF(note.IsOwner, "yes" , "no") %> 
    <input type='hidden' value='<%= note.NoteUserId %>' /> 
<% next %> 
+0

Certainement le meilleur moyen d'y aller. Plus facile d'ajouter d'autres données de modèle à la page lorsque la complexité augmente. –

+0

Fonctionne presque parfaitement, merci! Le seul problème est le <% - <% = note.IsOwner? "oui": "non"%> -%> partie. Je reçois une erreur de compilation lorsque j'essaie de l'utiliser. – j82374823749

+0

Peu de C# rampant. Corrigé. – tvanfosson