【问题标题】:How to make a viewModel to be Enumerable如何使 viewModel 可枚举
【发布时间】:2020-09-06 07:00:01
【问题描述】:

我正在实施 asp.net core 3.1。我将视图模型传递给剃刀视图,如下所示:

公共类 BuyRequestViewModel {

    public IEnumerable<BuyRequest> BuyRequestVM { get; set; }
    public IEnumerable<string> PlatesVM { get; set; }

}

我的问题是,由于我的视图模型不是 Ienumerable 类型,因此我在剃刀视图的 foreach 中遇到错误。错误如下: ForEach 语句无法对“MyPanel.ViewModels.BuyRequestViewModel”类型的变量进行操作,因为“MyPanel.ViewModels.BuyRequestViewModel”不包含“GetEnumerator”的公共实例定义

我的剃刀视图代码如下:

@model MyPanel.ViewModels.BuyRequestViewModel
<table id="myDummyTable" class="table m-table mytable table-striped table-bordered">

    <thead>
        <tr>
            <th>
                Region
            </th>
            <th>
                Zone
            <th>
                MyPlate
            </th>
  
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.BuyRequestVM.Select(x => x.Region))
                </td>
                <td>

                    @Html.DisplayFor(modelItem => item.BuyRequestVM.Select(x => x.Zone))
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.PlatesVM)
                </td>
            </tr>
        }
    </tbody>
</table>

下面是我的控制器中的索引操作:

public async Task<IActionResult> Index()
{

    var bwrvm = new BuyRequestViewModel();

    List<string> platesList = new List<string>();

   
    var WasteAPIContext = _context.BuyRequest
       
        .Include(b => b.UserWasteUnitNavigation).ToList();

   bwrvm.BuyWasteRequestVM = WasteAPIContext;
    

    var plateData = _context.Car.Select(x => x.Plate).ToList();

    for (int i = 0; i < plateData.Count; i++)
    {
        //platesList.Add(plateData[i].ToString().Substring(2, 5));
        string temp = getPlateCharacter(plateData[i].ToString().Substring(2, 3));
        plateData[i].Remove(2, 3);
        string totalPlate = plateData[i].Insert(2, temp);

        platesList.Add(totalPlate);
    }

    bwrvm.PlatesVM = platesList;

    return View(bwrvm);
}

感谢您的帮助。

【问题讨论】:

  • 如果你想使用你的代码,你需要通过List查看,并将@model MyPanel.ViewModels.BuyRequestViewModel改为@model IEnumerable&lt;MyPanel.ViewModels.BuyRequestViewModel&gt;

标签: asp.net-core razor


【解决方案1】:
@foreach (var item in Model)

应该是

@foreach (var item in Model.BuyWasteRequestVM)

因为 Model == BuyRequestViewModel 包含 2 个带有列表的属性。

【讨论】:

    猜你喜欢
    • 2010-11-05
    • 1970-01-01
    • 2014-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    相关资源
    最近更新 更多