2016-11-21 2 views
0

Я получаю сообщение об ошибке, на которое я не могу найти решение, скорее всего это проблема с моими моделями, которые я пытаюсь подключить, ошибка, которую я получаю, следующая: «Исключение типа« System.ArgumentOutOfRangeException »произошло в mscorlib.dll, но не было обработано в коде пользователя», когда я пытаюсь выполнить итерацию по каждому столбцу. Итак, в основном одна из таблиц имеет меньше записей, чем другие? Как я могу это решить? Итерация находится в представлении -> item.Contacts.Count()asp.net mvc 5 Произошло исключение типа «System.ArgumentOutOfRangeException»

Программа должна взять несколько столбцов выбора из таблиц: Contatti, Contacts и Companies, которые находятся в разных местах и ​​объединяют их (что происходит в список метода GET в контроллере), Contatti - это таблица сервера sql, импортированная в проект как .edmx, остальные 2 являются локальными для посевных таблиц проекта. код выглядит следующим образом:

модель, которая приносит таблицы вместе:

public partial class ContactsUni2 
{ 

    [Key, ForeignKey("Contatti")] 
    public int ContattoID { get; set; } 
    public List<Contatti> Contattis { get; set; } 
    public List<Companies> Companies { get; set; } 
    public List<Contact> Contacts { get; set; } 
    public virtual Contatti Contatti { get; set; } 
    public virtual Contact Contact { get; set; } 
    public virtual Companies Company { get; set; } 
} 

Контакты Модель:

public class Contact 
{ 
    [Key] 
    public int ContactId { get; set; } 
    public string Name { get; set; } 
    public string Address { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string Zip { get; set; } 
    [DataType(DataType.EmailAddress)] 
    public string Email { get; set; } 
    [ForeignKey("Companies")] 
    public int CompanyId { get; set; } 
    public virtual ICollection<Companies> Companies { get; set; } 
    [Required] 
    //public virtual Contatti Contatti { get; set; } 
    public virtual ICollection<Contatti> Contatti { get; set; } 
} 

фирмы модель:

public class Companies 
{ 
    [Key] 
    public int CompanyId { get; set; } 
    public string CompanyName { get; set; } 
    public string CompanyAddress { get; set; } 
    public string CompanyCity { get; set; } 
    public string CompanyState { get; set; } 
    public string CompanyZip { get; set; } 
    public string CompanyArea { get; set; } 
} 

Contatti Модель:

public partial class Contatti 
{ 
    [Key, ForeignKey("Contact")] 
    public int ContattoID { get; set; } 
    public string Nome { get; set; } 
    public string Via { get; set; } 
    public string Citta { get; set; } 
    public string Stato { get; set; } 
    public string CodicePostale { get; set; } 
    public string Email { get; set; } 
    [Required] 
    public virtual ICollection<Contact> Contact { get; set; } 
} 

контроллер GET:

// GET: ContactsUni21 
    public ActionResult Index(String Page) 
    { 
     ContactsUni2 CU = new ContactsUni2(); 
     CU.Contattis = db.Contattis.ToList(); 
     CU.Contacts = db.Contacts.ToList(); 
     CU.Companies = db.Companies.ToList(); 
     List<ContactsUni2> contactlist = new List<ContactsUni2>(); 
     contactlist.Add(CU); 
     return View(contactlist); 
    } 

Вид:

<body> 
<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<table class="table"> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.Contatti.ContattoID) 
      @Html.DisplayNameFor(model => model.Contatti.Nome) 
      @Html.DisplayNameFor(model => model.Contatti.Citta)    
      @Html.DisplayNameFor(model => model.Contatti.CodicePostale) 
      @Html.DisplayNameFor(model => model.Contatti.Email) 
      @Html.DisplayNameFor(model => model.Contact.Address) 
      @Html.DisplayNameFor(model => model.Contact.CompanyId) 
      @Html.DisplayNameFor(model => model.Contact.ContactId) 
      @Html.DisplayNameFor(model => model.Company.CompanyName) 

     </th> 
     <th></th> 
    </tr> 

    @foreach (var item in Model.ToList()) 
    { 
     for (int i = 0; i < @item.Contacts.Count(); i++) 
     { 
      <tr> 
       <td> 
        @item.Contattis[i].ContattoID 
        @item.Contattis[i].Nome 
        @item.Contattis[i].Citta            
        @item.Contattis[i].CodicePostale 
        @item.Contattis[i].Email 
        @item.Contacts[i].Address 
        @item.Contacts[i].CompanyId 
        @item.Contacts[i].ContactId 


       </td> 
       <td> 
        @Html.ActionLink("Edit", "Edit", new { id = item.ContattoID }) | 
        @Html.ActionLink("Details", "Details", new { id = item.ContattoID }) | 
        @Html.ActionLink("Delete", "Delete", new { id = item.ContattoID }) 
       </td> 
      </tr> 
+0

«Как я решить это?" Задача которого? Что коллекции разных размеров или что вы пытаетесь вытащить больше предметов, чем там? Почему бы просто не обойти обе коллекции отдельно? –

+1

Вероятно (int i = 0; i <@ item.Contacts.Count(); i ++) i больше, чем количество Contattis (@ item.Contattis [i]). Другими словами, Contattis имеет меньше элементов, чем Контакты. – kat1330

+0

Я пробовал цикл отдельно, но я получаю только данные из таблицы Contacts, а не из contattis, потому что это таблица сервера sql или модель данных неправильная? – Dantuzzo

ответ

0

У меня не было возможности проверить это, но что-то вроде этого:

@foreach (var item in Model.ToList()) 
{ 
    //for (int i = 0; i < @item.Contacts.Count(); i++) 
    foreach (var contact in item) 
    { 
     <tr> 
      <td> 
       @contact.ContattoID 
       @contact.Nome 
       @contact.Citta            
       @contact.CodicePostale 
       @contact.Email 
       @contact.Address 
       @contact.CompanyId 
       @contact.ContactId 


      </td> 
      <td> 
       @Html.ActionLink("Edit", "Edit", new { id = item.ContattoID }) | 
       @Html.ActionLink("Details", "Details", new { id = item.ContattoID }) | 
       @Html.ActionLink("Delete", "Delete", new { id = item.ContattoID }) 
      </td> 
     </tr> 
    } 
} 
Смежные вопросы