2013-08-16 4 views
-1

Я хочу простой раскрывающийся список, содержащий значения «По возрастанию» и «По убыванию», которые затем отправляются контроллеру как sortOrder, когда кнопка поиска нажата в методе Index(). Я пробовал так много разных вещей и просто не могу заставить это работать, что я делаю неправильно.Не удается получить Dropdownlist для правильной работы

P.S Я не хочу делать эту модель, я просто хочу вернуть простой «Asc» или «Desc» из выпадающего списка в переменную sortOrder.

UserController.cs

public ViewResult Index(string searchString, string sortOrder = "Asc") 
    { 
     var sortOrderParam = new[] 
      { 
       new SelectListItem { Value = "Asc", Text = "Ascending" }, 
       new SelectListItem { Value = "Desc", Text = "Descending" } 
      }; 

     var users = from u in db.TBL_SYS_USER 
        select u; 

     if (!string.IsNullOrEmpty(searchString)) 
     { 
      users = users.Where(x => x.USER_FIRST_NAME.ToUpper().Contains(searchString.ToUpper())); 
     } 

     switch (sortOrder) 
     { 
      case "Desc": 
       users = users.OrderByDescending(u => u.USER_FIRST_NAME); 
       break; 
      default: 
       users = users.OrderBy(u => u.USER_FIRST_NAME); 
       break; 
     } 

     PopulateFieldDropdownList(""); 

     return View(users.ToList()); 
    } 

Index.cshtml

@using (Html.BeginForm()) 
{ 
    <p> 
     Search Criteria: @Html.TextBox("searchString") 
     Order By: @Html.DropDownList("sortOrderParam") 

     <input type="submit" value="Search"/> 
    </p> 
} 

ответ

1

В вашем действии контроллера, вы должны создать список опций DropDownList и передать их на ваш взгляд в ViewBag, или как свойство вашего ViewModel. Как показано ниже:

public ViewResult Index(string searchString, string sortOrder = "Asc") 
{ 
    var users = from u in db.TBL_SYS_USER 
       select u; 

    if (!string.IsNullOrEmpty(searchString)) 
    { 
     users = users.Where(x => x.USER_FIRST_NAME.ToUpper().Contains(searchString.ToUpper())); 
    } 

    switch (sortOrder) 
    { 
     case "Desc": 
      users = users.OrderByDescending(u => u.USER_FIRST_NAME); 
      break; 
     default: 
      users = users.OrderBy(u => u.USER_FIRST_NAME); 
      break; 
    } 

    PopulateFieldDropdownList(""); 

    var sortOrderOptions = new List<SelectListItem>(); 
    sortOrderOptions.Add(new SelectListItem { Value = "Asc", Text = "Ascending" }); 
    sortOrderOptions.Add(new SelectListItem { Value = "Desc", Text = "Descending" }); 
    ViewBag.SortOrderOptions = sortOrderOptions; 

    return View(users.ToList()); 
} 

Первый аргумент в Html.DropDownList метода является имя поля (которое будет название значения, которое будет размещено на ваше действие), а второй из них является IEnumerable<SelectListItem>, которые являются в DropDownList. Итак, ваш взгляд будет выглядеть следующим образом:

@using (Html.BeginForm()) 
{ 
    <p> 
     Search Criteria: @Html.TextBox("searchString") 
     Order By: @Html.DropDownList("sortOrderParam", ViewBag.SortOrderOptions) 

     <input type="submit" value="Search"/> 
    </p> 
} 
0

Я использовал следующий код, я в конечном итоге выяснить это:

Контролер:

public ViewResult Index(string searchString, string fieldToSearch, string sortOrder = "Asc") 
    { 
     var sortOrderOptions = new[] 
      { 
       "Asc", 
       "Desc" 
      }; 

     ViewBag.sortOrderList = new SelectList(sortOrderOptions); 

     var users = from u in db.TBL_SYS_USER 
        select u; 


     if (!string.IsNullOrEmpty(searchString)) 
     { 
      users = users.Where(x => x.USER_FIRST_NAME.ToUpper().Contains(searchString.ToUpper())); 
     } 

     switch (sortOrder) 
     { 
      case "Desc": 
       users = users.OrderByDescending(u => u.USER_FIRST_NAME); 
       break; 
      default: 
       users = users.OrderBy(u => u.USER_FIRST_NAME); 
       break; 
     } 

     PopulateFieldDropdownList(""); 

     return View(users.ToList()); 
    } 

cshtml

@using (Html.BeginForm()) 
{ 
<p> 
    Search Criteria: @Html.TextBox("searchString") 
    Order By: @Html.DropDownList("sortOrder", ViewBag.sortOrderList as SelectList) 
    <input type="submit" value="Search"/> 
</p> 
} 
Смежные вопросы