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
员工的创建
视图中,我想显示一些项目,可以检查其中的几个项目
我已经在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>