Asp.net mvc 使用实体框架和NUGET页面列表填充MVC应用程序的下拉列表
我需要在使用实体框架的MVC5应用程序中提供两个不同的过滤器(一个通过文本框控件,另一个通过下拉列表)。难以用表中的选定值填充控件。虽然我最初担心多个值(在列表控件中),因为我将一个包含多个值的表合并为一个包含单个项的表,但我还没有超出步骤1。我应该指出,我正在使用分页列表控件,这可能会使事情更加复杂 模型 (相当简单,这里看不到太多) 控制器 使用排序和名称过滤器非常简单Asp.net mvc 使用实体框架和NUGET页面列表填充MVC应用程序的下拉列表,asp.net-mvc,entity-framework,pagedlist,Asp.net Mvc,Entity Framework,Pagedlist,我需要在使用实体框架的MVC5应用程序中提供两个不同的过滤器(一个通过文本框控件,另一个通过下拉列表)。难以用表中的选定值填充控件。虽然我最初担心多个值(在列表控件中),因为我将一个包含多个值的表合并为一个包含单个项的表,但我还没有超出步骤1。我应该指出,我正在使用分页列表控件,这可能会使事情更加复杂 模型 (相当简单,这里看不到太多) 控制器 使用排序和名称过滤器非常简单 if (searchString != null) { page
if (searchString != null)
{
page = 1;
}
else
{
searchString = currentFilter;
}
ViewBag.CurrentFilter = searchString;
var employees = from s in db.tblEmployeeADPs.Include(s => s.tblDepartmentFuncADP)
.Where(s => s.Status == "Active")
select s;
if (!String.IsNullOrEmpty(searchString))
{
employees = employees.Where(s => s.LastName.Contains(searchString)
|| s.FirstName.Contains(searchString));
}
if (!String.IsNullOrEmpty(DepartmentFunction))
{
employees = employees.Where(s => s.HomeDepartmentDesc == DepartmentFunction);
}
int pageSize = 30;
int pageNumber = (page ?? 1);
return View(employees.ToPagedList(pageNumber, pageSize));
看法
@使用(Html.BeginForm(“Index”、“Employee”、FormMethod.Get))
{
按名称查找:@Html.TextBox(“searchString”,ViewBag.currentFilter为字符串)
XMan筛选器:@Html.DropDownListFor(m=>m.FunctionName,新选择列表(ViewBag.DepartmentFunc,“FunctionName”,“FunctionName”),“--Select One--”)
}
@Model.PageCount的@页(Model.PageCountUrl.Action(“索引”),
新{sortOrder=ViewBag.CurrentSort,currentFilter=ViewBag.currentFilter,第页,占位符forVariable})
当我尝试使用m=>m.valuename lambda语法测试集合之外的任何内容时,我得到一个错误:
PagedList.IPagedList'不包含'FunctionName'的定义,并且没有接受'PagedList.IPagedList'类型的第一个参数的扩展方法'FunctionName'可以编辑:
@Html.DropDownListFor(m => m.FunctionName, new SelectList(ViewBag.DepartmentFunc, "FunctionName", "FunctionNAme"), "-- Select One --")
将此行编辑为
@Html.DropDownListFor(model => model.FirstOrDefault().FunctionName, new SelectList(ViewBag.DepartmentFunc, "FunctionName", "FunctionName"), "-- Select One --")
它应该可以工作。选择列表中的最后一个参数是
FunctionNAme
。这是正确的吗?是的,这里有轻微的输入错误,因为它应该是FunctionName,因为您显然在模型中声明了@model IPagedList
,并且dos不包含名为FunctionName
的属性创建包含属性的视图模型(例如)string FunctionName
绑定dropdownlist和属性IPagedList Employees
(然后您可以摆脱所有其他可怕的ViewBag
属性,并强绑定到您的模型)参考一个示例我将再次进行三重检查,但在调整之后,它抛出了以下错误:“模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式。”代码>在您的模型中。我将此引用添加到模型中的两个表(员工和部门功能)。它以前包含在我的元数据类中,因此我可以使用更可读的名称。但是,在我重建项目后,它仍然抛出相同的错误。@ThomasWashington看到了吗
@Html.DropDownListFor(model => model.FirstOrDefault().FunctionName, new SelectList(ViewBag.DepartmentFunc, "FunctionName", "FunctionName"), "-- Select One --")