2010-02-02 6 views
3

Я новичок в веб-приложениях, MVC и LinqToSql. Я создал веб-приложение MVC, используя учебник NerdDinner в качестве руководства. Теперь я добавляю к ним отношения «многие ко многим». И я просто натыкаюсь на стены на каждом шагу. У меня есть список мультиселементов в режимах «Редактировать» и «Создать». Для представлений «Детали и список» я хотел бы перечислить выбранные значения.Показать список значений в MVC Detail View

У меня есть 3 стола: компания, субконтракт и таблица ссылок CompanyToSubcontract. У меня есть код, который получает руководство моих выбранных компаний из таблицы CompanyToSubcontract, которая используется в другом месте моего кода. Я не знаю, как его отобразить.

Должен ли я написать еще одну функцию, чтобы получить названия Компании из таблицы компании? Я передаю список имен в представление SubcontractDetail, а затем каким-то образом прокручиваю его?

Те же вопросы, что и представление SubcontractIndex. Представление Index в табличном формате, я хотел бы иметь столбец «Компания», который имеет список разделенных запятыми компаний для каждой строки субподряда.

[Authorize] 
     public ActionResult Details(string id) 
     { 
      subcontract subcontract = subcontractRepository.GetSubcontract(id); 

      IEnumerable<Guid> cmpny = subcontractRepository.GetSubcontractCompanies(subcontract.subcontract_id); 

      if (subcontract == null) 
       return View("NotFound"); 
      else 
      { 
       return View("Details", subcontract); 
      } 
     } 

[Authorize] 
    public ActionResult Index() 
    { 
     var subcontracts = subcontractRepository.FindAllSubcontracts().ToList(); 
     return View("Index", subcontracts); 
    } 

ответ

2

У вас есть несколько вариантов:
1) Вы можете создать новый класс, который содержит субподряд & IEnumerable и передать объект нового класса представления. Это обычная практика в ASP.NET MVC.

public class MyCustomModelView 
{ 
    public IEnumerable<Guid> Company{ get; set; } 
    public subcontract Subcontract { get; set; } 
} 

И в контроллере:

return View("Details", new MyCustomModelView(){ 
    Company = cmpny, 
    Subcontract = subcontract }); 

И добавить этот новый тип должен быть типом вашего зрения.

enter code here 

2) Кроме того, вы можете добавить IEnumerable в коллекцию ViewData, как это:

ViewData["Company"] = cmpny; 

и обращаться к нему с индексатор в представлении

<% foreach(Guid id in (ViewData["Company"] as IEnumerable<Guid>)) { %> 
...Display names... 
<% } %> 

Я лично recomand вы ели, потому что вам не нужно бросать, и это чище.

+0

Использовал customModelView. Думаю, я мог бы понять это, но как бы я сделал это для индекса? В настоящее время я передаю ему список субконтрактов, для каждого субконтракта в списке, как мне получить список компаний? – RememberME

+0

Если вам нужен список компаний для каждого субконтракта, вы должны получить его в контроллере и передать все данные в представление. Если вы используете Linq для Sql или Entity Framework, и существует связь между субконтрактами и компанией, вы можете перемещаться с использованием соответствующих свойств объектов. –

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