使用ViewModel时View中遍历CustomerVlan的foreach循环报错求助
解决foreach遍历CustomerVlan集合的类型不匹配错误
问题现象
在使用ConnVlanDron ViewModel的View页面中,尝试通过foreach循环遍历CustomerVlan集合时,先后触发两个错误:
- 初始报错CS0230:需要类型和标识符
- 添加
var后报错CS1579:无法对Customervlan类型的变量执行foreach语句,因为该类型没有GetEnumerator的公共实例或扩展定义
错误根源
ViewModel中CustomerVlan被定义为单个Customervlan对象,但Controller却将List<Customervlan>集合赋值给该属性,类型不匹配导致无法执行遍历操作。
修复步骤
1. 修改ViewModel定义
将CustomerVlan属性的类型改为集合类型(如List<Customervlan>):
using AirportSit.Models; namespace AirportSit.ViewModels { public class ConnVlanDron { public Connection Connection { get; set; } // 改为集合类型,匹配Controller中的赋值类型 public List<Customervlan> CustomerVlan { get; set; } } }
2. 调整Controller赋值逻辑
Controller中cvlans已经是List<Customervlan>类型,修改ViewModel后可直接正常赋值:
public List<Customervlan> cvlans = new List<Customervlan>(); public List<Connection> conn = new List<Connection>(); public IActionResult Create() { var VLANDDisnull = from myobject in _db.CustomerVlans where myobject.DisconnectionDate == null select myobject; ViewData["Customercode"] = new SelectList(_db.Customers, "Id", "CompanyName"); ViewData["Customervlancode"] = new SelectList(VLANDDisnull.ToArray(), "Id", "CompanyName"); ViewData["Switchcode"] = new SelectList(_db.Switchzs, "Id", "SwitchName"); ConnVlanDron CV = new ConnVlanDron(); // 类型匹配,可正常赋值集合 CV.CustomerVlan = cvlans; CV.Connection = conn; return View(CV); }
3. 确认View中的遍历代码
View中的foreach语句无需额外修改,可正常遍历集合:
@using AirportSit.ViewModels @model ConnVlanDron @foreach(var Azure in Model.CustomerVlan) { // 在此添加遍历后的业务逻辑 } <form method="post"> <div class="border p-3 mt-4"> <div class="row pb-2"> <h2 class="text-primary">Create Connection</h2> <hr /> </div> <div class="mb-3"> <label asp-for="Connection.SwitchPortNumber"></label> <input asp-for="Connection.SwitchPortNumber" class="form-control" /> <span asp-validation-for="Connection.SwitchPortNumber" class="text-danger"></span> </div> <!-- 其他表单内容 --> </form>
内容的提问来源于stack exchange,提问作者Null Zero
相关产品推荐
相关产品推荐

