我可以在我的视图模型中创建一个带有嵌套 IEnumerable 的 MVC 网络网格吗?

本文关键字:IEnumerable 嵌套 MVC 网格 网络 一个 模型 视图 我的 创建 我可以 | 更新日期: 2023-09-27 18:36:38

我和这个人有类似的情况。我还想在父级内部放一个 IEnumberable<> @model,这是一个正常的@model。我用将两者结合的视图模型完成了整个事情。但是现在我不知道当我希望实现我的网络网格时如何进行。我应该如何将模型绑定到 webgrid,我应该使用 @foreach,因为我在技术上没有 IEnumerable 模型,但我确实有该模型的 IEnumberable 属性?

@model MyViewModel
@{
var myWebGrid = new WebGrid(Model.theIEnumarablePropertyOfMyViewModel);
}
@foreach (var item in Model.theIEnumarablePropertyOfMyViewModel){
@myWebGrid.GetHtml()
}

我可以在我的视图模型中创建一个带有嵌套 IEnumerable 的 MVC 网络网格吗?

看看这篇文章,了解使用 WebGrid 的良好基本解释。

与您

发布的代码相对应的最重要的部分(没有嵌套的 IEnumerable):

public ActionResult List()
  {
    IEnumerable<Product> model =
      _productService.GetProducts();
    return View(model);
  }
@model IEnumerable<MsdnMvcWebGrid.Domain.Product>
@{
  ViewBag.Title = "Basic Web Grid";
}
@{
  var grid = new WebGrid(Model);
}
@grid.GetHtml()

因此,在您的设置中一切看起来都很好,包括嵌套的 IEnumerable,除了指出以下一行:

@foreach (var item in Model.theIEnumarablePropertyOfMyViewModel){
@myWebGrid.GetHtml()
}

无需再次迭代集合!您已经在WebGrid的构造函数中提供了集合,然后只需调用它GetHtml()方法来呈现结果。所以上面的只是:

@myWebGrid.GetHtml()

只需将视图模型视为模型将包含的内容的声明即可。如果你想在你的模型上有一个 IEnumerable,它不是一个@model IEnumerable,它只是你的@models。IE无数。它只是输入预期的对象,而不是挂断什么是"正常"模型。

普通模型只包含视图中所需的内容,如果在这种情况下,您认为 Ienumerable 是您需要的,只需将其放在模型上即可。

谈到IEnumerables,为什么不创建一个包含要放入Webgrid的强类型项目的列表,因为列表已经实现了IEnumerable...?