2017-02-03 4 views
0

У меня есть ViewModel, состоящий 2 списка:Сообщение ViewModel, который содержит несколько список

public class RandomViewmodel 
{ 
     public List<Model1> Model1 { get; set; } 
     public List<Model2> Model2 { get; set; } 
} 

Когда я получить доступ к этим ViewModel, чтобы создать вид, что работает отлично

@for (int i = 0; i < Model.Model1.Count(); i++) 
{ 
    x = i; 
    var item = Model.Model1.ElementAt(i); 
    <tr>     
    <td> 
     @Html.Editor("[" + i + "].Amount", new { htmlAttributes = new { @class = "form-control", @Value = item.Amount } })      
    </td> 
</tr> 
} 

@for (int k=0; k < Model.Model2.Count; k++) 
{ 
x = x + 1; 
var bacc = Model.Model2.ElementAt(k); 
@Html.Hidden("[" + k + "].ID", bacc.ID, new { htmlAttributes = new { @id = "[" + k + "].ID" } }) 

<tr style="font-weight:bold;"> 
    <td style="padding-left: 25px;"> 
      @(x+1) @bacc.name 
    </td> 
    <td class="adder_table_right" width="130px"> 
     @Html.Editor("[" + k + "].MiscAmount1", new { htmlAttributes = new { @class = "form-control" } }) 
    </td> 
    <td class="adder_table_right" width="130px"> 
     @Html.Editor("[" + k + "].MiscAmount2", new { htmlAttributes = new { @class = "form-control" } }) 
    </td> 
</tr>      
} 

Вот мои действия контроллера :

[HttpPost] 

public ActionResult Index(RandomViewModel vm) 

Теперь, когда я ударил submit, я вижу, что объект viewmodel vm получает NULL для обеих моделей.

+0

Вашего производящая 'name' атрибуты, которые не имеют никакого отношения вообще к вашей модели - ее' @for (INT I = 0; я m.Model1 [i] Amount)} 'и аналогично для 2-го цикла. –

+0

И обратитесь [этот ответ] (http://stackoverflow.com/questions/30094047/html-table-to-ado-net-datatable/30094943#30094943), чтобы понять, как привязываться к коллекциям –

+0

Атрибут name принадлежит вторая модель моей модели просмотра public List Model2 {get; задавать; } кроме того, этот данные в порядке прекрасный на мой взгляд. Но при отправке значения post action получает null для viewmodel –

ответ

0

Вы должны ссылаться на каждый список в своей модели.

и value атрибуты будут автоматически инициализировать при использовании Html Helpers

использовать эти коды он должен работать:

@for (int i = 0; i < Model.Model1.Count(); i++) 
{ 
x = i; 
var item = Model.Model1.ElementAt(i); 
<tr>     
    <td> 
     @Html.EditorFor(m => m.Model1[i].Amount, new { @class = "form-control"})      
    </td> 
</tr> 
} 


@for (int k=0; k < Model.Model2.Count; k++) 
{ 
x = x + 1; 
var bacc = Model.Model2.ElementAt(k); 
@Html.HiddenFor(m => m.Model2[i].ID) 
<tr style="font-weight:bold;"> 
    <td style="padding-left: 25px;"> 
      @(x+1) @bacc.name 
    </td> 
    <td class="adder_table_right" width="130px"> 
     @Html.EditorFor(m => m.Model2[i].MiscAmount1, new { @class = "form-control" }) 
    </td> 
    <td class="adder_table_right" width="130px"> 
     @Html.EditorFor(m => m.Model2[i].MiscAmount2, new { @class = "form-control" }) 

    </td> 
</tr>      
} 
0

использования @ Html.EditorFor для решения этой проблемы

0

В проблемой было соглашение об именах, которое было разрешено после того, как я перейду к следующей статье, упомянутой Стивеном Мюке из stackoverflow.

Это для других разработчиков, если они застряли в той же ситуации, что и моя. Сначала пройдите этот пост, это очень помогло.

Post an HTML Table to ADO.NET DataTable

День кодирование;)