2012-04-02 115 views
0

我真的不知道該如何應對下一個問題:相關的聯繫人顯示數據

所以,我用ASP.NET MVC3,這是用來記得當事件developped一個基於Web的應用程序被傳達給一些人。

我有3個表

Contact 
id_contact 
name 
firstname 
... 

event 
id_event 
... 

transmission 
FK_id_event 
FK_id_firstname 
mailed (boolean) 
phoned (boolean) 

對於每個事件,我需要列出所有與此相關的事件的聯繫人。並且對於每個聯繫人,我需要顯示2個複選框,如果聯繫人已被呼叫或郵寄,必須進行檢查。

' 
    ' GET: /Event/Details/5 

    Function Details(id As Integer) As ViewResult 
     Dim event As event = db.event.Single(Function(o) o.idOpportunite = id) 

     Dim contacts = (From a In db.contact, b In db.transmission 
         Where a.id_Contact = b.FK_id_contact And b.FK_id_event = id 
         Select a) 
     Dim transmission = (From a In contacts, b In db.transmission 
         Where a.id_Contact = b.FK_trans_cont 
         Select b) 

     Dim model = New EventDetails With { 
      .event= event, 
      .Contacts = contacts, 
      .TransOpp = transopp 
      } 

     Return View(model) 
    End Function 

我不知道代碼的「傳輸」部分是否良好。

視圖

這裏,這是我被顯示聯繫人

 @For Each contact In Model.contacts 
      @<tr> 
       <td> 
        @Html.ActionLink(contact.name + " " + contact.firstname , "Details", New With {.id = contact.idContact}) 
       </td> 
       <td> 
        @Html.Raw(contact.phone) 
       </td> 
       <td> 
        @*Html.DisplayFor(Function(modelItem) currentItem.mail)*@ 
        <a href=mailto:@contact.mail>@Html.Raw(contact.mail)</a> 
       </td> 
       <td> 
        ***My checkboxes should be here*** 
       </td> 
      </tr> 
     Next 

所以,我的問題是,我應該怎麼做,以顯示這些複選框? (對不起,如果我不能理解,我不是英語母語的人,不要猶豫,編輯我的英語錯誤(或不是很好的標題))。

亞西爾·的幫助下,我已經做到了這一點:

    @code 
        Dim mail As Boolean = (From a In Model.Event 
        Where a.FK_id_contact = contact.idContact And a.FK_id_event = Model.Opportunite.idOpportunite 
        Select a.mailed) 

        End Code 

但是,我得到一個錯誤: 值類型的「System.Collections.Generic.IEnumerable(布爾)」不能轉換到'布爾'。

+0

添加.FirstOrDefault()到你的查詢, Dim mail As Boolean =(From a In Model.Event 其中a.FK_id_contact = contact.idContact和a.FK_id_event = Model.Opportunite.idOpportunite 選擇a.mailed).FirstOrDefault(); – Yasser 2012-04-02 10:39:36

+0

它告訴我,我已經有一個打開的DataReader與這個連接相關聯,必須先關閉它。我沒有看到我可以有一個開放的聯繫。我已經有過這種錯誤。在linq查詢之後加入「tolist」已經解決了這個問題。在這裏,它什麼都不做:-( – 2012-04-02 10:53:07

+1

我在控制器的所有查詢之後放了一個tolist(),它解決了這個問題,我只是不知道爲什麼,Thx,複選框現在顯示出來,我將使用ajax查詢來更新複選框的更改 – 2012-04-02 10:54:54

回答

2

這裏是應該幫助

@{ 
bool isMailed = // set values; 
bool isPhoned = // set values 
    } 
@Html.CheckBox("mailed ", isMailed); 
@Html.CheckBox("phoned", isPhoned); 
+0

您的「//設置值」是我的問題如何設置這些值?如何從數據庫中捕捉視圖中的這些值? – 2012-04-02 09:26:28

+0

I'我已經有一個錯誤,我不知道如何修復 – 2012-04-02 09:38:28

1

在你ContactViewModel你可以有兩個屬性

bool isMailed ; 
bool isPhoned ; 

然後你綁定視圖模型視圖以及設定之前,你可以查詢從您的控制器數據庫這些參數。例如,如果顯示聯繫人ID = 1和事件ID = 2的數據,則可以查詢數據庫表傳輸,並查找您之前是否已調用或郵寄並更新ContactViewModel中的變量。

那麼在你看來,你可以在值如下

@Html.CheckBox("mailed ", contact.isMailed); 
@Html.CheckBox("phoned", contact.isPhoned); 

,如果你想更新提交數據到郵寄或者在數據庫中打電話給你可以使用上面的視圖模型做其綁定到複選框控制器。從控制器,你可以找到什麼是Event_Id,Contact_Id並郵寄或打電話,那麼你可以相應地更新數據庫

+0

Thx爲你的支持。我不知道你的答案是否比上面的更好,但是第一個工作,我會用這個。 – 2012-04-02 10:55:53