Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.NETMVC中枚举的Html帮助程序_C#_Asp.net Mvc_Foreach_Html Helper - Fatal编程技术网

C# Asp.NETMVC中枚举的Html帮助程序

C# Asp.NETMVC中枚举的Html帮助程序,c#,asp.net-mvc,foreach,html-helper,C#,Asp.net Mvc,Foreach,Html Helper,我有两个模型课: Employee.cs ProjectType.cs 在员工的创建视图中,我想显示一些项目,可以检查其中的几个项目 我已经在Create视图中为Html.radiobutton创建了一个foreach循环 @model App.Data.Models.Employee @using App.Data.Models; @{ ViewBag.Title = "Create"; } <h2>Create</h2> @u

我有两个模型课:

  • Employee.cs
  • ProjectType.cs
  • 员工的
    创建
    视图中,我想显示一些项目,可以检查其中的几个项目

    我已经在Create视图中为
    Html.radiobutton
    创建了一个
    foreach
    循环

    @model App.Data.Models.Employee
    @using App.Data.Models;
        
    @{
        ViewBag.Title = "Create";
    }
    
    <h2>Create</h2>
    
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
    }
    
    <div class="form-horizontal">
    
    <div class="form-group">
       @Html.LabelFor(model => model.Project, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @foreach (var project in Enum.GetValues(typeof(ProjectType)))
            {
            <div class="col-md-10">
    
                @Html.RadioButtonFor(m => m.Project, project)
                @Html.Label(project.ToString())
            </div>
                    }
            </div>
    
            </div>
    
        </div>
    
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    
    
    
    
    @model App.Data.Models.Employee
    @使用App.Data.Models;
    @{
    ViewBag.Title=“创建”;
    }
    创造
    @使用(Html.BeginForm())
    {
    @Html.AntiForgeryToken()
    }
    @LabelFor(model=>model.Project,htmlAttributes:new{@class=“controllabel col-md-2”})
    @foreach(Enum.GetValues中的var项目(typeof(ProjectType)))
    {
    @RadioButton(m=>m.Project,Project)
    @Label(project.ToString())
    }
    
    如果我能够选择多个选项,这将很好。我假设在本例中,我应该使用Html.CheckBoxFor创建foreach循环,我在本说明中尝试这样做->

    但它并没有真正起作用: 我没有向ProjectType.cs添加任何内容。我在Employee.cs中添加了一个类

     public class Employee
        {
            public int Id { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public List<EnumModel> CheckBoxProjectType { get; set; }
        }
        public class EnumModel
        {
            public ProjectType ProjectType { get; set; }
            public bool isSelected { get; set; }
        }
    
    公共类员工
    {
    公共int Id{get;set;}
    公共字符串名{get;set;}
    公共字符串LastName{get;set;}
    公共列表CheckBoxProjectType{get;set;}
    }
    公共类枚举模型
    {
    公共项目类型项目类型{get;set;}
    公共布尔值被选为{get;set;}
    }
    
    当我在EmployeeController中创建循环时,CheckBoxProjectType用红色下划线表示:

      public ActionResult Create()
            {
                ProjectType model = new ProjectType();
                model.CheckBoxProjectType = new List<EnumModel>();
                foreach (ProjectType projectType in Enum.GetValues(typeof(ProjectType)))
                {
                    model.CheckBoxProjectType.Add(new EnumModel() { ProjectType = projectType, isSelected = false });
                }
                return View();
            }
    
    public ActionResult Create()
    {
    ProjectType模型=新的ProjectType();
    model.CheckBoxProjectType=新列表();
    foreach(Enum.GetValues中的ProjectType ProjectType(typeof(ProjectType)))
    {
    添加(新的EnumModel(){ProjectType=ProjectType,isSelected=false});
    }
    返回视图();
    }
    
    在“创建视图”中,我试图从先前发布的链接复制循环

    @model App.Data.Models.Employee
    @using App.Data.Models;
        
    @{
        ViewBag.Title = "Create";
    }
    
    <h2>Create</h2>
    
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
    }
    
    <div class="form-horizontal">
        
           <div class="form-group">
          
                <div class="col-md-10">
                    @for (int i = 0; i < Model.CheckBoxProjectType.Count; i++)
                    {
                        @Html.DisplayFor(m => m.CheckBoxProjectType[i].ProjectType);
                        @Html.CheckBoxFor(m => m.CheckBoxProjectType[i].isSelected);
                        @Html.HiddenFor(m => m.CheckBoxProjectType[i].ProjectType);
                    }
    
    
                    @Html.ValidationMessageFor(model => model.ProjectType, "", new { @class = "text-danger" })
    
            
    
                </div>
    
            </div>
    
        </div>
    
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    
    
    
    @model App.Data.Models.Employee
    @使用App.Data.Models;
    @{
    ViewBag.Title=“创建”;
    }
    创造
    @使用(Html.BeginForm())
    {
    @Html.AntiForgeryToken()
    }
    @对于(int i=0;im.CheckBoxProjectType[i].ProjectType);
    @Html.CheckBoxFor(m=>m.CheckBoxProjectType[i].isSelected);
    @Html.HiddenFor(m=>m.CheckBoxProjectType[i].ProjectType);
    }
    @Html.ValidationMessageFor(model=>model.ProjectType,“,new{@class=“text danger”})
    

    有人能指导我如何为enum创建foreach循环吗?

    我已经看到错误——“I”未定义且未分配。你怎么能编译这个

     @Html.LabelFor(m => m.CheckBoxProjectType[i].ProjectType);
    
    用户只需“项目”即可

    我在你的create视图和acton中也没有看到任何@model

    public ActionResult Create()
            {
                ProjectType model = new ProjectType();
                  //Where is your ProjectType class?
                 // and why I see an Employee AS a model in your view?
    ......
               
           //you have to change your return to this
    
                return View(model);
            }
    
    最好创建这样一个特殊的viewModel用作模型(放在单独的文件中):

    公共类EmployeeViewModel
    {
    公共雇员雇员{get;set;}
    公共列表枚举模型{get;set;}
    }
    
    您的员工将:

    public class Employee
        {
            public int Id { get; set; }
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public List<ProjectType > ProjectTypes { get; set; }
        }
    
    
    公共类员工
    {
    公共int Id{get;set;}
    公共字符串名{get;set;}
    公共字符串LastName{get;set;}
    公共列表项目类型{get;set;}
    }
    
    您的新创建操作如下所示:

    public ActionResult Create()
            {
                var model = new EmployeeViewModel{
                    Employee=new Employee, 
                    EnumModels=new List<EnumModel>()
                   };
               
                foreach (var projectType in Enum.GetValues(typeof(ProjectType)))
                {
                    model.EnumModels.Add(new EnumModel { ProjectType = projectType, 
                    isSelected = false });
                }
                return View(model);
            }
    
    public ActionResult Create()
    {
    var模型=新员工视图模型{
    雇员=新雇员,
    EnumModels=新列表()
    };
    foreach(Enum.GetValues中的var projectType(typeof(projectType)))
    {
    添加(新的EnumModel{ProjectType=ProjectType,
    isSelected=false});
    }
    返回视图(模型);
    }
    
    在您的create视图中,用EmployeeModel替换Employee(我认为您还必须添加一些Employee输入控件):

    
    @使用App.Data.Models
    @模型EmployeeViewModel
    @{
    ViewBag.Title=“创建”;
    }
    创造
    @使用(Html.BeginForm())
    {
    @Html.AntiForgeryToken()
    }
    项目
    @对于(int i=0;im.EnumModels[i].ProjectType);
    @(m=>m.EnumModels[i].isSelected);
    @Html.HiddenFor(m=>m.EnumModels[i].ProjectType);
    }
    @Html.ValidationMessageFor(model=>model.EnumModels,”,新{
    class=“text danger”})
    
    使用以下代码:

     public ActionResult Create()
    {
        Employee model = new Employee();
        model.CheckBoxProjectType = new List<EnumModel>();
        foreach (ProjectType projectType in Enum.GetValues(typeof(ProjectType)))
        {
           model.CheckBoxProjectType.Add(new EnumModel() { ProjectType = projectType, isSelected = false });
        }
        return View(model);
    }
    
    public ActionResult Create()
    {
    员工模型=新员工();
    model.CheckBoxProjectType=新列表();
    foreach(Enum.GetValues中的ProjectType ProjectType(typeof(ProjectType)))
    {
    添加(新的EnumModel(){ProjectType=ProjectType,isSelected=false});
    }
    返回视图(模型);
    }
    
    和视图:

    @using App.Data.Models.Employee;
        
    @{
        ViewBag.Title = "Create";
    }
    
    <h2>Create</h2>
    
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
    }
    
    <div class="form-horizontal">
        
           <div class="form-group">
                <div class="col-md-10">
                    @for (int i = 0; i < Model.CheckBoxProjectType.Count; i++)
                    {
                        @Html.DisplayFor(m => m.CheckBoxProjectType[i].ProjectType);
                        @Html.CheckBoxFor(m => m.CheckBoxProjectType[i].isSelected);
                        @Html.HiddenFor(m => m.CheckBoxProjectType[i].ProjectType);
                    }
    
                </div>
    
            </div>
    
        </div>
    
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    
    @使用App.Data.Models.Employee;
    @{
    ViewBag.Title=“创建”;
    }
    创造
    @使用(Html.BeginForm())
    {
    @Html.AntiForgeryToken()
    }
    @对于(int i=0;im.CheckBoxProjectType[i].ProjectType);
    @Html.CheckBoxFor(m=>m.CheckBoxProjectType[i].isSelected);
    @HiddenFor(m=>m.Ch
    
    public ActionResult Create()
            {
                var model = new EmployeeViewModel{
                    Employee=new Employee, 
                    EnumModels=new List<EnumModel>()
                   };
               
                foreach (var projectType in Enum.GetValues(typeof(ProjectType)))
                {
                    model.EnumModels.Add(new EnumModel { ProjectType = projectType, 
                    isSelected = false });
                }
                return View(model);
            }
    
    
    @using App.Data.Models
    @model EmployeeViewModel
        
    @{
        ViewBag.Title = "Create";
    }
    
    <h2>Create</h2>
    
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
    }
    
    <div class="form-horizontal">
        
           <div class="form-group">
          <h5> Projects </h5>
                <div class="col-md-10">
    
                    @for (int i = 0; i < Model.EnumModels.Count; i++)
                    {
                        @Html.DisplayFor(m => m.EnumModels[i].ProjectType);
                        @Html.CheckBoxFor(m => m.EnumModels[i].isSelected);
                        @Html.HiddenFor(m => m.EnumModels[i].ProjectType);
                    }
    
    
                    @Html.ValidationMessageFor(model => model.EnumModels, "", new {  
            class = "text-danger" })
    
                </div>
    
            </div>
    
        </div>
    
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    
    
     public ActionResult Create()
    {
        Employee model = new Employee();
        model.CheckBoxProjectType = new List<EnumModel>();
        foreach (ProjectType projectType in Enum.GetValues(typeof(ProjectType)))
        {
           model.CheckBoxProjectType.Add(new EnumModel() { ProjectType = projectType, isSelected = false });
        }
        return View(model);
    }
    
    @using App.Data.Models.Employee;
        
    @{
        ViewBag.Title = "Create";
    }
    
    <h2>Create</h2>
    
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
    }
    
    <div class="form-horizontal">
        
           <div class="form-group">
                <div class="col-md-10">
                    @for (int i = 0; i < Model.CheckBoxProjectType.Count; i++)
                    {
                        @Html.DisplayFor(m => m.CheckBoxProjectType[i].ProjectType);
                        @Html.CheckBoxFor(m => m.CheckBoxProjectType[i].isSelected);
                        @Html.HiddenFor(m => m.CheckBoxProjectType[i].ProjectType);
                    }
    
                </div>
    
            </div>
    
        </div>
    
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>