Отображение списка значений в подробном представлении MVC - PullRequest
3 голосов
/ 02 февраля 2010

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

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

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

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

[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);
    }

1 Ответ

3 голосов
/ 02 февраля 2010

У вас есть несколько вариантов:
1) Вы можете создать новый класс, который содержит subcontract & 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...
<% } %>

Я лично порекомендую вам первые, потому что вам не нужно разыгрывать, и это чище

...