2012-04-02 139 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

相关问题