我正在申请使用MVC和LINQ。
我有一个名为home的控制器执行此操作:
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()
还有一个名为home的页面,其中包含用于显示输出的代码:
<% For Each note In ViewData("notes")%>
<%=Html.Encode(note.ToString)%>
<% next %>
但是,输出如下所示:
{note = vbnv,datestamp =,is_owner = True,note_user_id = 1}
如何输出单个列(如note或datestamp)?有没有更好的方法呢?
我尝试过使用viewdata.model,但数据来自两个不同的表,所以我不能说它是什么类型。
由于
答案 0 :(得分:3)
创建一个ViewModel类,其中包含注释文本,日期,布尔值isOwner和用户ID。
Public Class NoteViewModel
public Note as String
public DateStamp as DateTime
public IsOwner as Boolean
public NoteUserID as Integer
End Class
使用联接中的值选择此项。
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)
然后使用NoteViewModel强烈输入您的视图。这将允许您引用Model.Note等。
<% 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 %>