2009-08-16 11 views
1

私はMVCとLINQを使用してアプリケーションを作成しています。LINQ、ASP.net mvcと結合

私はこれを行う家と呼ばれるコントローラがあります。

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() 

をして出力を表示するため、このコードがある家というページ:

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

しかし、出力は次のようになります。

{注意= vbnv、日付スタンプ=、is_owner =真、note_user_id = 1}

個々の列(ノートや日付スタンプなど)を出力するにはどうしたらいいですか?これを行うより良い方法はありますか?

私はviewdata.modelを使用しようとしましたが、データは2つの異なるテーブルからのものなので、どのタイプであるかはわかりません。

おかげ

答えて

3

ノートテキスト、日付、ブールisOwner、およびユーザIDが含まれているのViewModelクラスを作成します。

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 %> 
+0

間違いなく良い方法です。複雑さが増すと、他のモデルデータを簡単にページに追加できます。 –

+0

ほぼ完璧に動作します、ありがとう! 唯一の問題は <% - <%= note.IsOwnerですか? "はい": "いいえ"%> - %> 部分。私はそれを使用しようとすると、コンパイルエラーが発生します。 – j82374823749

+0

少しのC#が入ってきました。訂正されました。 – tvanfosson