在下面定义的索引方法搜索的employeeStatus的列表从员工表使用Asp.Net MVC3,我有问题。和的employeeStatus型号为:
Using Asp.Net MVC3, I am having problem in defining the Index Method below for searching the list of EmployeeStatus From Employee Table. and EmployeeStatus Model as:
public class EmployeeStatus { public int Id { get; set; } public string Status { get; set; } }我已经创建Employee.cs型号如下:
I have created Employee.cs Model as follows:
public class Employee { public int ID { get; set; } public string EmployeeName { get; set; } public int EmployeeStatus { get; set; } }和控制器EmployeeController用行动指数
and Controller EmployeeController with action Index
public ActionResult Index(string searchString, string employeeStatus) { var StatusLst = new List<string>(); var StatusQry = from st in db.EmployeeStatus orderby st.Status select st.Status; StatusLst.AddRange(StatusQry.Distinct()); ViewBag.empStatus = new SelectList(StatusLst); var employee = from m in db.Employee select m; if (!String.IsNullOrEmpty(searchString)) { employee = employee.Where(s => s.EmployeeName.Contains(searchString)); } if (String.IsNullOrEmpty(employeeStatus)) return View(employee); else { if (employeeStatus == "Active") return View(employee.Where(st => st.EmployeeStatus == 0)); else if (employeeStatus == "Inactive") return View(employee.Where(st => st.EmployeeStatus == 1)); else return View(employee.Where(st => st.EmployeeStatus == 2)); }和查看:
@using (Html.BeginForm()) { < @Html.DropDownList("empStatus", "All") </div> <div class="span7"> @Html.TextBox("SearchString",null) </div> </div> </div> <input type="submit" class="btn primary" value="Search" /> }和我DBScript是:
and my DBScript is:
CREATE TABLE雇员(ID INT PRIMARY KEY IDENTITY(1,1),EmployeeName为nvarchar(255),INT的employeeStatus)INSERT INTO员工VALUES('阿肖克',0)INSERT INTO员工VALUES('阿希什',1)INSERT INTO员工VALUES('Ashik',2)CREATE TABLE的employeeStatus(ID INT,状态为nvarchar(100))INSERT INTO的employeeStatus值(0,活动)INSERT INTO的employeeStatus值(1,无效)INSERT INTO的employeeStatus值(3,'短期')
我如何从下拉菜单中输入搜索的employeeStatus,我有问题,如何使用它。
How Do I Search from Dropdown List for the EmployeeStatus, I am having problem how to use it.
推荐答案首先你的看法是创建一个&LT;选择&GT; 与 NAME = empStatus,但你的方法有一个名为参数的employeeStatus 。由于名称不匹配的employeeStatus 的值将是空和。凡() 语句将永远不会被执行。此外, @using(Html.BeginForm())是 FormMethod.Post ,所以你需要的默认操作指定 FormMethod.Get 。您还回发的employeeStatus 的字符串状态属性时,你应该张贴 INT ID 值。
Firstly your view is creating a <select> with name="empStatus" but you method has a parameter named employeeStatus. Since the names do not match the value of employeeStatus will be null and .Where() statement will never be executed. In addition, the default action for @using (Html.BeginForm()) is FormMethod.Post so you need to specify FormMethod.Get. You are also posting back the string Status property of EmployeeStatus when you should be posting the int Id value.
通过创建一个视图模型重新presenting要在视图中显示哪些启动
Start by creating a view model representing what you want to display in the view
public class EmployeeListVM { public string SearchText { get; set; } public int? Status { get; set; } public SelectList StatusList { get; set; } public IEnumerable<Employee> Employees { get; set; } }和视图
@model EmployeeListVM @using Html.BeginForm("Index", "Employee", FormMethod.Get)) { @Html.TxtBoxFor(m => m.SearchText) @Html.DropDownListFor(m => m.Status, Model.StatusList, "All") <input type="submit" value="Search" /> } @(foreach var employee in Model.Employees) { .... // display employees }然后在控制器
public ActionResult Index(string searchText, int? status) { var statusList = db.EmployeeStatus; var employees = db.Employee; if (!String.IsNullOrEmpty(searchText)) { employees = employees.Where(e => e.EmployeeName.Contains(searchText)); } if (status.HasValue) { employees = employees.Where(e => e.EmployeeStatus == status.Value); } var model = new EmployeeListVM { SearchText = searchText, Status = status, StatusList = new SelectList(statusList, "Id ", "Status"), Employees = employees }; return View(model); }更多推荐
降DownList搜索
发布评论