2016-11-29 4 views
0

Я пытаюсь показать данные из двух таблиц. Я пробовал это https://www.asp.net/mvc/overview/older-versions/getting-started-with-ef-5-using-mvc-4/reading-related-data-with-the-entity-framework-in-an-asp-net-mvc-application и использовал активную загрузку.Ошибка при просмотре при попытке загрузки

У меня было три стола «узытканик», «rolaPowiazanie» и «rola». «RolaPowiaznie» соединение «Неактивированная» и „Рол“ - есть два столбца „idRola“ и „конец idUzytkownik“ эта таблица невидима в моей модели данных

Мои модели:

Неактивированных

public partial class uzytkownik 
{ 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public uzytkownik() 
    { 
     this.ocenaPowiazanie = new HashSet<ocenaPowiazanie>(); 
     this.przedmiotPowWykladowca = new HashSet<przedmiotPowWykladowca>(); 
     this.grupa = new HashSet<grupa>(); 
     this.rola = new HashSet<rola>(); 
    } 

    [Key] 
    public int idUzytkownik { get; set; } 
    public string imie { get; set; } 
    public string nazwisko { get; set; } 
    public string pesel { get; set; } 
    public string haslo { get; set; } 
    public string email { get; set; } 
    public Nullable<bool> stan { get; set; } 

    public virtual ICollection<rola> rola { get; set; } 
} 
.

Рола

public partial class rola 
    { 
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] 
    public rola() 
    { 
     this.uzytkownik = new HashSet<uzytkownik>(); 
    } 
    [Key] 
    public int idRola { get; set; } 
    public string nazwaRoli { get; set; } 

    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")] 
    public virtual ICollection<uzytkownik> uzytkownik { get; set; } 
} 

Они автоматически генерируются ADO.NET Entity Data Model - База данных первого

Как и в уроке я попытался жадную загрузку и мой контроллер выглядит следующим образом:

public class UzytkownicyController : Controller 
{ 
    private PegazEntities db = new PegazEntities(); 

    // GET: Uzytkownicy 
    public ActionResult Index() 
    { 
     var uzytkownicy = db.uzytkownik.Include(x => x.rola); 
     return View(uzytkownicy.ToList()); 
    } 

На мой взгляд, я попробовал:

@Html.DisplayFor(modelItem => item.rola.nazwaRoli) 

«ICollection» не содержит определение для «nazwRoli» и нет метод расширения «nazwaRoli», принимающий первый аргумент типа «ICollection», может быть найден (вам не хватает директивы использования или ссылки на сборку?)

Я что-то пропустил? Я попытался сделать все, как в этом уроке, но что-то пошло не так.

+0

Он не знает типа, так что он падает обратно к ICollection. Попробуйте использовать бросок. что-то вроде @ Html.DisplayFor (modelItem => ((uzytkownik) item.rola) .nazwaRoli) – Nikki9696

+0

Не совсем относится к вопросу, который вы задаете, но вы можете прочитать рекомендации Microsoft по капитализации (https: // msdn .microsoft.com/EN-US/библиотека/ms229043.aspx); в основном, свойства и классы/структуры/перечисления должны быть паскальными. Вам не обязательно следовать этим рекомендациям, но вы, вероятно, должны это сделать. –

ответ

0

С rola это коллекция, я бы не подумал, что вы сможете напрямую использовать DisplayFor. Вы пытались перебирать коллекцию вместо этого?

Например, на ваш взгляд, вы можете сделать что-то подобное?

@model List<uzytkownik> 

@foreach (var uzytkownik in Model) 
{ 
    foreach (var rola in uzytkownik.rola) 
    { 
     @Html.DisplayFor(model => rola.nazwaRoli) 
    } 
} 

Или при использовании foreach итератора не работает, то вы могли бы просто использовать классический for цикл:

@model List<uzytkownik> 

@for (var i; i < Model.Count; i++) 
{ 
    for (var j; j < Model[i].rola.Count(); j++) 
    { 
     @Html.DisplayFor(model => model[i].rola[j].nazwaRoli) 
    } 
} 
+0

Большое вам спасибо :) Первый работает – Katniss

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