2012-04-02 2 views
0

я не знаю, как иметь дело со следующим вопросом:отображающих данные, относящихся к контакту

Итак, у меня есть webbased приложения развившееся с ASP.NET MVC3, который используется, чтобы помнить, когда событие передается некоторым людям.

Я 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 (булевых)» не может быть преобразована на «Boolean».

+0

добавить .FirstOrDefault() в запросе, как, Dim почту As Boolean = (Из В Model.Event Где a.FK_id_contact = contact.idContact И a.FK_id_event = Model.Opportunite.idOpportunite Выберите a.mailed) .FirstOrDefault(); – Yasser

+0

Он говорит мне, что у меня уже есть открытый DataReader, связанный с этим соединением, который должен быть закрыт первым. Я не вижу, могу ли я иметь открытую связь. У меня уже была такая ошибка. Помещение «списка» после запроса linq решило проблему.Здесь он ничего не делает :-( –

+1

Я поставил tolist() после всех запросов контроллера и решил проблему. Я просто не знаю почему. Теперь отображаются флажки Thx, Я буду использовать ajax-запрос для обновления изменений флажков –

ответ

2

Вот то, что должно помочь

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

«// set values;» - это проблема, которую я имею. Как установить эти значения? Как уловить эти значения в представлении из базы данных? –

+0

I ' я был немного дальше, но у меня была ошибка, что я действительно не знаю, как исправить –

1

В вашем ContactViewModel вы можете иметь два свойства

bool isMailed ; 
bool isPhoned ; 

Затем вы можете запросить базу данных от контроллера, прежде чем связать модели представления вида и установить эти параметры. Например, если вы показываете данные для контакта id = 1 и event id = 2, вы можете запросить передачи таблицы базы данных и найти, были ли вы вызваны или отправлены по почте до и обновите переменную в ContactViewModel.

затем на ваш взгляд вы можете связать значения с флажком следующим

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

, если вы хотите обновить бронированный или позвонили в базе данных вы можете сделать это с помощью выше ViewModel путем представления данных в контроллер. от контроллера вы можете найти то, что является event_id, Contact_Id и отправлены по почте или звонил, то вы можете обновить базу данных соответственно

+0

Thx для вашей поддержки. Я не знаю, лучший ли ваш ответ выше, чем первый, но первый работал, и я буду использовать этот. –

Смежные вопросы