0

В Asp.Net MVC у меня возникла проблема с определением метода индекса ниже для поиска в списке EmployeeStatus из таблицы Employee. иСвязывание значений в Asp.Net MVC для поиска

EmployeeStatus модель как:

public class EmployeeStatus 
{ 
    public int Id { get; set; } 
    public string Status { get; set; } 
} 

Я создал Employee.cs модель следующим образом:

public class Employee 
{ 
    public int ID { get; set; } 
    public string EmployeeName { get; set; } 
    public int EmployeeStatus { get; set; } 
} 

и контроллер EmployeeController с индексом действия

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 является:

CREATE TABLE Employee(ID INT PRIMARY KEY IDENTITY(1,1),EmployeeName nvarchar(255), EmployeeStatus int) INSERT INTO Employee VALUES ('Ashok',0) INSERT INTO Employee VALUES ('Ashish',1) INSERT INTO Employee VALUES ('Ashik',2) CREATE TABLE EmployeeStatus(Id int,Status nvarchar(100)) INSERT INTO EmployeeStatus Values (0,'Active') INSERT INTO EmployeeStatus Values (1,'InActive') INSERT INTO EmployeeStatus Values (3,'ShortTerm')

Как найти из раскрывающихся для EmployeeStatus, я имею проблему, как использовать его.

+0

что делают вас означает «поиск из DropDownList»? – Yoky

+0

@yohanis поиск из выпадающего списка с помощью viewbag. –

+0

Пожалуйста, объясните, что вы подразумеваете под поиском из выпадающего списка? Является ли это доступным для поиска выпадающим списком? – Hiba

ответ

0

Во-первых, ваше мнение создает <select> с name="empStatus", но у вас есть параметр с именем employeeStatus. Поскольку имена не соответствуют значению employeeStatus, будет null и .Where() заявление никогда не будет выполнено. Кроме того, действие по умолчанию для @using (Html.BeginForm()) равно FormMethod.Post, поэтому вам необходимо указать FormMethod.Get. Вы также отправляете обратно string Status недвижимость EmployeeStatus, когда вы должны размещать стоимость int Id.

Начнем с создания модели вид, представляющий то, что вы хотите отобразить в представлении

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); 
} 
Смежные вопросы