2012-04-02 2 views
0

Je ne sais pas vraiment comment faire face à la question suivante:affichage de données relatives à un contact

Donc, j'ai une application basée sur le Web développé avec ASP.NET MVC3, qui sert à se rappeler quand un événement est relayé à certaines personnes.

J'ai 3 tables

Contact 
id_contact 
name 
firstname 
... 

event 
id_event 
... 

transmission 
FK_id_event 
FK_id_firstname 
mailed (boolean) 
phoned (boolean) 

Pour chaque événement, je dois énumérer tous les contacts qui sont liés à cet événement. Et pour chaque contact, je dois afficher 2 cases à cocher qui doivent être vérifiées si le contact a été appelé ou posté.

' 
    ' 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 

Je ne sais pas si la partie "transmission" du code est bonne ou pas.

Ici, dans la vue, cela est si j'afficher les contacts

 @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 

Alors, ma question est, que dois-je faire pour afficher les cases à cocher?

(désolé si je ne comprends pas, je ne suis pas un anglophone natif, n'hésitez pas à éditer mes erreurs anglaises (ou le titre qui n'est pas génial)).

Avec l'aide de Yasser, je l'ai fait:

    @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 

Cependant, je reçois une erreur: Valeur de type 'System.Collections.Generic.IEnumerable (de Boolean)' ne peut pas être converti à 'Boolean'.

+0

ajouter .FirstOrDefault() à votre requête comme, Dim courrier As Boolean = (D'un Model.Event Dans Où a.FK_id_contact = contact.idContact Et a.FK_id_event = Model.Opportunite.idOpportunite Sélectionnez a.mailed) .FirstOrDefault(); – Yasser

+0

Il me dit que j'ai déjà un DataReader ouvert associé à cette connexion qui doit être fermé en premier. Je ne vois pas si je peux avoir une connexion ouverte. J'avais déjà eu ce genre d'erreur. Mettre un "tolist" après la requête linq avait résolu le problème.Ici, ça ne fait rien :-( –

+1

J'ai mis un tolist() après toutes les requêtes du contrôleur, et ça a résolu le problème .Je ne sais pas pourquoi ... Thx, les cases à cocher sont maintenant affichées, Je vais utiliser une requête ajax pour mettre à jour les changements des cases à cocher –

Répondre

2

Voici quelque chose qui devrait aider

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

Votre "// définir les valeurs;" est le problème que j'ai.Comment définir ces valeurs? Comment attraper ces valeurs dans la vue de la DB? –

+0

I ' Avons été un peu plus loin, mais j'ai eu une erreur que je ne sais pas vraiment comment résoudre –

1

Dans votre ContactViewModel vous pouvez avoir deux propriétés

bool isMailed ; 
bool isPhoned ; 

Ensuite, vous pouvez interroger la base de données de votre contrôleur avant de lier la viewmodel la vue et de définir ces paramètres. Par exemple, si vous affichez des données pour l'ID de contact = 1 et l'ID d'événement = 2, vous pouvez interroger les transmissions de table de base de données et déterminer si vous avez déjà appelé ou envoyé et mis à jour la variable dans ContactViewModel.

alors dans votre vue, vous pouvez lier les valeurs à la case à cocher comme suit

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

si vous souhaitez mettre à jour la poste ou appeliez dans la base de données, vous pouvez le faire en utilisant le ViewModel ci-dessus en soumettant des données à la manette. du contrôleur, vous pouvez trouver ce qui est le EVENT_ID, contact_id et envoyé par la poste ou téléphona, vous pouvez mettre à jour la base de données en conséquence

+0

Thx pour votre soutien.Je ne sais pas si votre réponse est meilleure que celle juste au-dessus, mais le premier travaillé, et je vais utiliser celui-ci. –

Questions connexes