2012-04-02 6 views
0

ich nicht wirklich wissen, wie man mit dem nächsten Thema befassen:Anzeige an einen Kontakt bezogenen Daten

So habe ich eine webbasierte Anwendung mit ASP.NET MVC3 entwickelt, die, wenn ein Ereignis zu erinnern, verwendet wird, wird an einige Leute weitergegeben.

Ich habe 3 Tabellen

Contact 
id_contact 
name 
firstname 
... 

event 
id_event 
... 

transmission 
FK_id_event 
FK_id_firstname 
mailed (boolean) 
phoned (boolean) 

Für jedes Ereignis muss ich alle Kontakte aufzulisten, die zu diesem Ereignis in Zusammenhang stehen. Und für jeden Kontakt muss ich 2 Checkboxen anzeigen, die überprüft werden müssen, wenn der Kontakt angerufen oder mailt wurde.

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

Ich weiß nicht, ob der "Übertragung" Teil des Codes gut ist oder nicht.

Hier in der Ansicht, das ich die Kontakte angezeigt wird Were

 @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 

Also, meine Frage ist, was soll ich tun, um diese Kontrollkästchen angezeigt werden?

(Entschuldigung, wenn ich nicht verständlich bin, bin ich kein englischer Muttersprachler. Zögern Sie nicht, meine englischen Fehler zu bearbeiten (oder der Titel, der nicht ein großer ist)).

Mit Hilfe von Yasser, ich habe dies getan:

    @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 

Allerdings bekomme ich einen Fehler: Wert des Typs 'System.Collections.Generic.IEnumerable (Of Boolean)' kann nicht konvertiert werden zu 'Boolean'.

+0

.FirstOrDefault(), um Ihre Abfrage hinzufügen wie, Dim Mail As Boolean = (von In Model.Event Wo a.FK_id_contact = contact.idContact Und a.FK_id_event = Model.Opportunite.idOpportunit Wählen Sie a.mailed) .FirstOrDefault(); – Yasser

+0

Es teilt mir mit, dass ich bereits einen offenen DataReader mit dieser Verbindung verbunden habe, der zuerst geschlossen werden muss. Ich sehe nicht, wo ich eine offene Verbindung haben kann. Ich hatte schon einen solchen Fehler. Ein "Tolist" nach der Linq-Abfrage hatte das Problem gelöst.Hier macht es nichts :-( –

+1

Ich habe nach allen Abfragen des Controllers einen tolist() gesetzt, und es hat das Problem gelöst. Ich weiß nur nicht warum. Thx, die Checkboxen werden nun angezeigt, Ich werde eine Ajax-Abfrage verwenden, um die Änderungen der Kontrollkästchen zu aktualisieren –

Antwort

2

Hier ist etwas, das

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

Ihre "// set-Werte;" ist das Problem, das ich habe. Wie Sie diese Werte festlegen, wie diese Werte in der Ansicht aus der DB zu fangen? –

+0

I ' Ich war schon ein bisschen weiter, aber ich hatte einen Fehler, dass ich nicht wirklich weiß, wie man –

1

In Ihrem ContactViewModel helfen sollten Sie zwei Eigenschaften haben können

bool isMailed ; 
bool isPhoned ; 

Dann können Sie die Datenbank von Ihrem Controller abzufragen, bevor Sie die Viewmodel die Ansicht und setzen binden diese Parameter. Wenn Sie beispielsweise Daten für die Kontakt-ID = 1 und die Ereignis-ID = 2 anzeigen, können Sie die Übertragungen der Datenbanktabellen abfragen und feststellen, ob Sie die Variable in ContactViewModel bereits aufgerufen oder per E-Mail gesendet haben.

dann Ihrer Ansicht nach können Sie die Werte der Checkbox binden als

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

folgt, wenn Sie die per Post oder telefoniert in der Datenbank aktualisieren möchten, können Sie es tun, indem Sie die oben Ansichtsmodell unter Verwendung von Daten zu der Einreichung Regler. von der Steuerung finden Sie, was die event_id, contact_id ist und per Post oder telefoniert, dann können Sie die Datenbank entsprechend aktualisieren

+0

Thx für Ihre Unterstützung beheben kann. Ich weiß nicht, ob Ihre Antwort besser ist als die obige, sondern die erste gearbeitet, und ich werde dieses verwenden. –