2013-08-16 27 views
-1

我想要一個簡單的下拉列表,其中包含值「升序」和「降序」,然後在Index()方法中按下搜索按鈕時將其作爲sortOrder發送到控制器。我嘗試了很多不同的東西,只是無法讓這個工作,我做錯了什麼。我不想讓這個模型,我只想從下拉列表中找到一個簡單的「Asc」或「Desc」到sortOrder變量中。無法使Dropdownlist正常工作

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> 
}