ASP.NET?MVC實現(xiàn)下拉框多選
我們知道,在ASP.NET MVC中實現(xiàn)多選Select的話,使用Html.ListBoxFor或Html.ListBox方法就可以。在實際應(yīng)用中,到底該如何設(shè)計View Model, 控制器如何接收多選Select的選中項呢?
實現(xiàn)效果如下:

初始狀態(tài)某些選項被選中。
當(dāng)按著ctrl鍵,進(jìn)行重新選擇多項,點擊"提交"按鈕,把選中項的id拼接。

對于Select中的項,包含顯示值,Value值,以及是否選中,抽象成如下的類。
public class City
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsSelected { get; set; }
}對于整個多選Select來說,在ASP.NET MVC中,所有的選項被看作SelectListItem類型,選中的項是一個string類型的集合。于是多選Select的View Model設(shè)計為:
public class CityVm
{
public IEnumerable<SelectListItem> Cities { get; set; }
public IEnumerable<string> SelectedCities { get; set; }
}在HomeController中,把SelectListItem的集合賦值給CityVm的Cities屬性。
public class HomeController : Controller
{
public ActionResult Index()
{
var cities = new List<City>
{
new City(){Id = 1, Name = "青島", IsSelected = true},
new City(){Id = 2, Name = "膠南", IsSelected = false},
new City(){Id = 3, Name = "即墨", IsSelected = true},
new City(){Id = 4, Name = "黃島", IsSelected = false},
new City(){Id = 5, Name = "濟(jì)南", IsSelected = false}
};
var citiesToPass = from c in cities
select new SelectListItem() {Text = c.Name, Value = c.Id.ToString(),Selected = c.IsSelected};
CityVm cityVm = new CityVm();
cityVm.Cities = citiesToPass;
ViewData["cc"] = citiesToPass.Count();
return View(cityVm);
}
......
}在Home/Index.cshtml中,是一個CityVm的強類型視圖,對于選中的項會以IEnumerable<string>集合傳遞給控制器。
@model MvcApplication1.Models.CityVm
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
@using (Html.BeginForm("GetCities", "Home", FormMethod.Post, new {id = "myForm"}))
{
@Html.ListBoxFor(c => c.SelectedCities, Model.Cities, new {size = ViewData["cc"]})
<br/>
<input type="submit" value="提交"/>
}在HomeController中,再把從視圖傳遞過來的IEnumerable<string>拼接并呈現(xiàn)。
public class HomeController : Controller
{
......
[HttpPost]
public ActionResult GetCities(IEnumerable<string> selectedCities)
{
if (selectedCities == null)
{
return Content("沒有選中任何選項");
}
else
{
StringBuilder sb = new StringBuilder();
sb.Append("選中項的Id是:" + string.Join(",", selectedCities));
return Content(sb.ToString());
}
}
}以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
Entity Framework Core實現(xiàn)軟刪除與查詢過濾器
這篇文章介紹了Entity Framework Core實現(xiàn)軟刪除與查詢過濾器的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02
NET Core 3.0 AutoFac內(nèi)置DI替換的新姿勢分享
這篇文章主要給大家介紹了關(guān)于NET Core 3.0 AutoFac內(nèi)置DI替換的新姿勢,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用NET Core 3.0具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
.NET Core跨平臺串口通訊使用SerialPortStream基礎(chǔ)類庫問題解決
這篇文章介紹了.NET Core跨平臺串口通訊使用SerialPortStream基礎(chǔ)類庫問題解決,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-01-01
asp.net頁面狀態(tài)管理cookie和服務(wù)器狀態(tài)管理Session
Session變量將在服務(wù)器為每個連接建立一個字典對象,使用的是服務(wù)端保存。Cookie可能會有一個按照年月日來判斷的作廢日期,而Session級別的變量在連接超時后就作廢2010-09-09
Asp.Net 無刷新文件上傳并顯示進(jìn)度條的實現(xiàn)方法及思路
這篇文章詳細(xì)介紹了無刷新文件上傳并顯示進(jìn)度條的思路和代碼,有需要的朋友可以參考一下2013-06-06

