2015-12-21 5 views
0

У меня есть модель какMVC частичный вид трейлерах другая модель

public class MainDataViewModel 
{ 
    [Required] 
    [Display(Name = "Select Work Orders")] 
    public string[] SelectedWorkOrdersValues { get; set; } 
    public MultiSelectList WorkOrderIds { get; set; } 

    public IEnumerable<ORDERMASTER> ordersDetails; 
} 

And Main Посмотреть как

@model InventoryEasy15.Models.MainDataViewModel 
<div class="box-body"> 
      <div class="col-md-6"> 
      <div class="form-group"> 
      @Html.ValidationSummary(true, "", new { @class = "text-danger" })     
     <label for="fileToUpload">Select the Work Orders</label> 
      @Html.ValidationMessageFor(m => m.WorkOrderIds, "", new { @class = "text-danger" }) 
        @Html.ListBoxFor(m => m.SelectedWorkOrdersValues, Model.WorkOrderIds as MultiSelectList, new { id = "WorkOrders", @class = "form-control", data_placeholder = "Choose Work Orders..." }) 
      </div> 
      </div> 
      </div> 
      <!-- /.box-body --> 

      <div class="box-footer"> 
      <input type="submit" value="Get WorkOrder Details" id="btnSubmit" class="btn btn-primary"> 
      </div> 

     </div> 
    </div> 
</div> 


@Html.Partial("MainDataWorkOrderDetails", Model.ordersDetails) 

и частичное представление как

@model IEnumerable<InventoryEasy15.ORDERMASTER> 
<div id="myDisplayID"><div> 

Сейчас я получаю сообщение об ошибке, как

Элемент модели, переданный в словарь, имеет тип «InventoryEasy15.Models.MainDataViewModel», но для этого словаря требуется элемент модели типа «System.Collections.Generic.IEnumerable`1 [InventoryEasy15.ORDERMASTER]».

Любые мысли.

Контроллер здесь

public async Task<ActionResult> MainDataWorkOrderDetails(MainDataViewModel m) 
    { 
     var model = new MainDataViewModel(); 
     var result = await db.ORDERMASTERs.Where(x => x.WOID == "WO7446708").ToListAsync(); 
     if (result != null) 
     { 
      model.ordersDetails = result; 
     } 
     return PartialView(model); 
    } 
+0

ошибка означает, что '' model.ordersDetails' является null'. Предложите добавить конструктор по умолчанию для его инициализации или добавить блок 'else' и включить' else {model.orderDetails = новый список } '. Примечание: вы можете просто использовать 'Model.WorkOrderIds' в методе' ListBoxFor() '(нет необходимости в' как MultiSelectList') –

+0

Я изменил это, если (result! = Null) { model.ordersDetails = результат; } и все еще не удается еще { model.ordersDetails = новый Список (); } – Techonthenet

+0

Непонятно, что вы здесь делаете. Почему у вашего метода GET есть параметр для модели (неправильная практика) и почему она возвращает частичный вид ?. Но я повторяю - ошибка означает, что при вызове '@ Html.Partial (« MainDataWorkOrderDetails », Model.ordersDetails) значение' Model.ordersDetails' равно 'null'. Отлаживайте свой код! –

ответ

1

Вы передаете модель в PartialView. Теперь, модель типа MainDataViewModel, и ваш частичный вид ожидает модель типа IEnumerable<InventoryEasy15.ORDERMASTER>

возвращение PartialView (модель);

Я думаю, вам следует рассмотреть возможность передачи model.orderDetails на частичный вид вашего действия.

возвращение PartialView (model.orderDetails);

Или же, просто возвращают вид, содержащий частичный вид, если вы хотите, чтобы передать всю модель

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