如何在表单剃须刀页面中使用 IEnumerable

Posted

技术标签:

【中文标题】如何在表单剃须刀页面中使用 IEnumerable【英文标题】:How to use IEnumerable in form razor page 【发布时间】:2021-10-22 13:28:43 【问题描述】:

我有一个用于在 razor 页面中创建页面以填写组织详细信息的表单。 该组织有一个字段 ParentId(它可能属于另一个组织)。 我想在 Select 中迭代 parentIds 列表(并在选项中显示标题)。 我收到此错误:以下示例生成 CS1579,因为 MyCollection 类不包含公共 GetEnumerator 方法

//Model
public class Organisation : EntityBase
    
        [Key]
        public int Id  get; set; 

        public Organisation Parent  get; set; 

        [Required]
        public string Title  get; set; 


//Controller
public IActionResult Create()
        
            IEnumerable<Organisation> objList = _db.Organisations;
            return View(objList);
        

//View

        @model MindNavigatorDB.Entities.Organisation;
        <form asp-action="Create" method="post">
        <div class="form-group">
       <label asp-for="Parent" class="control-label"></label>
           <select id="country"
                class="form-select form-control"
                asp-for="Parent"
                aria-label="Select">
                @foreach (Organisation item in Model)
                
                   <option selected="selected" value="">Please select</option>
                
                                
            </select>
            <span asp-validation-for="Parent" class="text-danger"></span>
          </div>                 
        </form>

【问题讨论】:

发布的代码似乎不包含名为 MyCollection 的类 【参考方案1】:

您必须将 ParentId 添加到 Orgainzation

public class Organisation : EntityBase
    
        [Key]
        public int Id  get; set; 

        public int? ParentId  get; set; 
        public virtual Organisation Parent  get; set; 

        [Required]
        public string Title  get; set; 

创建视图模型

public class OrganizationViewModel

    public Organization get; set;
    public  List<SelectListItem>     ParentSelectList  get; set;

动作

public IActionResult Create()

   var viewModel= new OrganizationViewModel
  
     Organization=new Organization(),
      ParentSelectList = _db.Organisations.Select( i=> new SelectListItem
        
        Value=i.Id.ToString(),
       Text=i.Title
       ).ToList()                                         
   
    return View(viewModel);

查看

 @model OrganisationViewModel;

<form asp-action="Create" method="post">
 <div class="form-group">
<label  class="control-label"> Parent </label>
 <select class="form-control" asp-for="@Model.Organization.ParentId" asp-items="@Model.ParentSelectList" ></select>
 <span asp-validation-for="@Model.Organization.ParentId" class="text-danger"></span>
 </div>                 
 </form>

【讨论】:

以上是关于如何在表单剃须刀页面中使用 IEnumerable的主要内容,如果未能解决你的问题,请参考以下文章

在 JavaScript 中遍历 IEnumerable 模型

将枚举转换为核心 2.1 剃须刀页面中的下拉列表

从一个剃须刀页面到另一个带有链接的页面

在视图组件或局部视图中使用表单

ASP.net 剃须刀页面和多选,在选择中发布所有项目

如何在剃须刀页面中实现 Treeview