2015-11-23 5 views
0

Я передаю значения списка в мой вид. Но я получаю сообщение об ошибке «Элемент модели, переданный в словарь, имеет тип« System.Collections.Generic.List ». Вот мой контроллер действия:Пропустить список для просмотра в MVC

public ActionResult Index() 
    { 
     Test t = new Test(); 
     List<Customer> myList= t.GetData(); 
     return View(myList); 
    } 

Вот вид:

@model List<AsyncActions.Models.Test> 
@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 
<table border="1" cellpadding="4"> 
    @foreach (var row in Model) 
    { 
    <tr> 
     @*<td>@row."CustomerID"</td> 
     <td>@row."CustomerCode"</td>*@ 
    </tr> 
} 

вот моя модель:

namespace AsyncActions.Models 
{ 
public class Test 
{ 
    public List<Customer> GetData() 
    { 
     try 
     { 
      Customer c = new Customer(); 
      List<Customer> cst = new List<Customer>(); 
      for (int i = 0; i < 10; i++) 
      {      
       c.CustomerID = i; 
       c.CustomerCode = "CST"+i; 
       cst.Add(c); 
      } 
      return cst; 
     } 
     catch (Exception) 
     { 
      throw new NotImplementedException(); 
     } 

    } 
} 
public class Customer 
{ 
    public int CustomerID { get; set; } 
    public string CustomerCode { get; set; } 
} 
} 

Я уже попытался удалить список <> из Посмотреть. Когда я это делаю, я получаю сообщение об ошибке, поскольку «оператор foreach не может работать с переменными типа« AsyncActions.Models.Test », потому что« AsyncActions.Models.Test »не содержит общедоступного определения для« GetEnumerator ». Я пробовал так много всего. Я проверил это link, но это не решило мою проблему. Я не могу узнать, что я пропустил. Буду признателен за любую оказанную помощь.

+2

Похоже, вы еще не опубликовали свой код. 'Список myList = t.GetData();' говорит, что ваша модель является «списком ». Но в вашем представлении есть что-то другое, как модель. –

+0

@kosala Пожалуйста, ознакомьтесь с обновленным вопросом. –

+0

Думаю, у вас уже есть ответ ниже. Этот комментарий не связан с вашим вопросом. В вашей модели есть ошибка. Вы должны определить 'Customer c = new Customer();' внутри цикла for. –

ответ

1

Измените ваш @model на @model IEnumerable<Customer>

@model IEnumerable<Customer> 
@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 
<table border="1" cellpadding="4"> 
    @foreach (var row in Model) 
    { 
    <tr> 
     @*<td>@row."CustomerID"</td> 
     <td>@row."CustomerCode"</td>*@ 
    </tr> 
} 
+0

Спасибо, я сменил модельное дефинирование на @model IEnumerable . Это решило мою проблему. –

2

Ваш взгляд модель должна быть

@model List<Customer> 
+0

Вы правы. Я пытался, как ты сказал, тоже работал. Спасибо, наконец, я сменил модельное ограничение на @model IEnumerable . Это решило мою проблему. –

1

Вы должны изменить определение вашей модели есть:

@model List<Customer> 
@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 
<table border="1" cellpadding="4"> 
    @foreach (var row in Model) 
    { 
    <tr> 
     @*<td>@row."CustomerID"</td> 
     <td>@row."CustomerCode"</td>*@ 
    </tr> 
} 
+0

Вы правы. Я пытался, как ты сказал, тоже работал. Спасибо, наконец, я сменил модельное ограничение на @model IEnumerable . Это решило мою проблему. –

2

Используйте это в вашем обзор должен решить проблему:

@model List<Customer> 
+0

Вы правы. Я пытался, как ты сказал, тоже работал. Спасибо, наконец, я сменил модельное ограничение на @model IEnumerable . Это решило мою проблему. –

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