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)行重新選擇多項,點(diǎ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的強(qiáng)類型視圖,對于選中的項會以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)文章
.net開發(fā)中批量刪除記錄時實現(xiàn)全選功能的具體方法
這篇文章介紹了.net開發(fā)中批量刪除記錄時實現(xiàn)全選功能的具體方法,有需要的朋友可以參考一下2013-11-11
Asp.Net在線預(yù)覽Word文檔的解決方案與思路詳解
這篇文章主要介紹了Asp.Net在線預(yù)覽Word文檔的解決方案與思路,大致思路是先將Word文檔轉(zhuǎn)換Html,再預(yù)覽Html,需要注意電腦安裝Office,需要的朋友可以參考下2022-04-04
ASP.NET Core擴(kuò)展庫的相關(guān)功能介紹
這篇文章主要介紹了ASP.NET Core擴(kuò)展庫的相關(guān)功能,幫助大家更好的理解和學(xué)習(xí)使用.Net技術(shù),感興趣的朋友可以了解下2021-03-03
使用jQuery Uploader顯示文件上傳進(jìn)度
在上傳大文件的時候, 我們都希望可以向用戶顯示上傳的進(jìn)度, 那么這里介紹的就是使用 jQuery Uploader 來實現(xiàn)這樣的效果2011-12-12

