【问题标题】:MVC partial view wtih different model不同模型的 MVC 局部视图
【发布时间】:2015-12-21 02:51:19
【问题描述】:

我有模型

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

    public IEnumerable<ORDERMASTER> ordersDetails;
}

主视图为

@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);
    }

【问题讨论】:

  • 这个错误意味着model.ordersDetailsnull。建议你添加一个默认构造函数来初始化它,或者添加一个else 块并包含else { model.orderDetails = new List&lt;ORDERMASTER&gt; }。旁注:您可以在ListBoxFor() 方法中使用Model.WorkOrderIds(不需要as MultiSelectList
  • 我改成这样了,if (result != null) { model.ordersDetails = result; } 并且它仍然失败 else { model.ordersDetails = new List(); }
  • 不清楚你在这里做什么。为什么你的 GET 方法有一个模型参数(不好的做法),为什么它返回一个局部视图?但我再说一遍 - 错误意味着当您调用 @Html.Partial("MainDataWorkOrderDetails", Model.ordersDetails) 时,Model.ordersDetails 的值是 null。调试你的代码!
  • 我正在尝试使用 Ajax 显示搜索结果,列表框选择将用于过滤模型。在调试命中 get 方法之前,它失败并显示错误消息。还有更多问题,我必须强制选择任何列表框选择,该怎么做?
  • 只需根据我的第一条评论添加一个默认构造函数,以便在您第一次渲染视图时ordersDetails 不会是null - public MainDataViewModel() { ordersDetails = new List() ; }`

标签: asp.net-mvc-4


【解决方案1】:

您正在将模型传递给 PartialView。现在,模型是 MainDataViewModel 类型的,而您的局部视图需要 IEnumerable&lt;InventoryEasy15.ORDERMASTER&gt; 类型的模型

返回部分视图(模型);

我认为您应该考虑将 model.orderDetails 从您的操作中传递给局部视图。

return PartialView(model.orderDetails);

或者,如果你想传递整个模型,只需返回包含部分视图的视图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-14
    • 1970-01-01
    • 2015-06-21
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多