我知道它应该是这样的
@Html.DropDownList("yourDropName", listItems, new { @class = "form-control" })
但是我无法弄明白我应该怎么做 在我的控制器中,我将一个列表传递给它,它在我的模型层中初始化,在我的View_Model中,我只是从模型中获取它并将其传递给我的控制器
这是在我的模型中
public List<int?> TeamId()
{
ListTeam = new List<int?>();
using (var context = new EF_Model.DigikalaHREntities())
{
//var p = context.Members.Any(c => c.TeamId);
var p = from c in context.Members
where c.TeamId.HasValue
select new { c.TeamId };
return p.Select(m => m.TeamId).ToList();
}
}
我的视图模型中有2个类,第一个只是带有一些数据注释的实体,第二个是我从模型中获取方法的类 所以这是我的View模型图层(我没有把这个传递给我的View)
public List<int?> GetTeamId()
{
Ref_CRUD = new Models.CRUD.Member();
return Ref_CRUD.TeamId();
}
我的控制器
#region [- Get -]
public ActionResult Create()
{
Ref_Member = new View_Model.Buisiness.Member();
return View(Ref_Member.GetTeamId());
}
这是我的观点
@model DigikalaHR.View_Model.Entitys.Member
.
.
.
.
<div class="form-group">
@Html.LabelFor(model => model.TeamId, "TeamId", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
//don't know how to use one of These two lines and which one i should use
@*@Html.DropDownList("TeamId",new SelectList(enum.(typeof())),htmlAttributes: new {@class="form-control" })*@
@*@Html.DropDownListFor(m => m.TeamId,new SelectList(Enum.GetValues(typeof(id))),"GetTeamId")*@
@Html.ValidationMessageFor(model => model.TeamId, "", new { @class = "text-danger" })
</div>
</div>
如何将我的列表从我的控制器发送到View中的DropDownList?
答案 0 :(得分:1)
我认为你在这里混合了一些东西。您的视图模型应该是特定于视图的模型,而这些模型只是用于数据传输的愚蠢的POCO类。没有业务逻辑或那些不知道您的数据访问技术/实体类是什么。不要将视图模型与实体类混合。
因此,在您的情况下,如果您的视图是创建成员,那么您应该拥有一个视图模型,其中包含视图中绝对需要的属性(对于输入元素)
public class CreateMemberVm
{
public string FirstName { set;get;}
public int? SelectedTeamId { set;get;}
public List<SelectListItem> Teams { set;get;}
// Add other properties as needed by the view.
}
视图需要为视图模型添加其他属性。没有理由盲目地将实体类中的所有属性添加到视图模型中。
现在在您的GET操作中,初始化此视图模型的对象,使用Teams
对象列表将SelectListItem
属性弹出(我们将在视图中使用它来构建SELECT元素选项) )并将对象发送到vieww
public ActionResult Create()
{
var vm = new CreateMemeberVm();
vm.Teams = GetTeamItems();
return View(vm);
}
public List<SelectListItem> GetTeamItems()
{
using (var db = new EF_Model.DigikalaHREntities())
{
return db.Teams
.Select(a=>new SelectListItem {
Value=a.TeamId.ToString(),
Text=a.TeamName
})
.ToList();
}
}
现在在您的视图中,应该对我们的视图模型进行强类型化,您可以使用DropDownListFor
辅助方法来呈现SELECT元素。
@model CreateMemberVm
@using(Html.BeginForm())
{
@Html.LabelFor(a=>a.FirstName)
@Html.TextBoxFor(a=>a.FirstName)
@Html.LabelFor(a=>a.SelectedTeamId)
@Html.DropDownListFor(m => m.SelectedTeamId, Model.Teams, "Select team")
<input type="submit" />
}
您可以使用相同的视图模型类作为HttpPost操作方法的参数,现在当用户在填写表单后提交表单时,将填充SelectedTeamId
属性和FirstName
属性表格数据,您可以使用它们保存到您的表格
[HttpPost]
public ActionResult Create(CreateMemeberVm model)
{
// check model.FirstName and model.SelectedId
// to do : Save as needed
// to do : return something
}
如果要在视图中预选一个项目(对于编辑成员用例),您只需将视图模型的SelectedTeamId
属性设置为数据库中的任何属性即可。
public ActionResult Edit(int id)
{
var m = db.Members.Find(id);
var vm = new CreateMemeberVm() { FirstName = m.FirstName, SelectedTeamId=m.TeamId};
vm.Teams = GetTeamItems();
return View(vm);
}