MVC实现多选下拉框,保存并显示多选项
在"MVC实现多选下拉框"中,主要是多选下拉框的显示,而实际情况通常是:选择多个选项提交后,需要在编辑页把所有选中的项显示出来。
模拟这样的一个场景:一个车迷可能有多个自己喜欢的汽车品牌。
关于车迷的Model:
namespace MvcApplication1.Models
{
public class CarFan
{
public int Id { get; set; }
public string Name { get; set; }
public string[] SelectedCars { get; set; }
}
}
以上,在"MVC实现多选下拉框"中也提到了,当我们通过<select multiple="multiple"...></select>显示多选下拉框的时候,其对应的Model属性类型一定是string[]。
关于汽车品牌的Model:
namespace MvcApplication1.Models
{
public class Car
{
public int Id { get; set; }
public string Name { get; set; }
}
}
创建FanController:
using System.Collections.Generic;
using System.Linq;
using System.Web.Mvc;
using MvcApplication1.Models; namespace MvcApplication1.Controllers
{
public class FanController : Controller
{ public ActionResult SaveCars()
{
var carFan = new CarFan() {Id = 1, Name = "Darren", SelectedCars = {}};
ViewBag.allcars = GetAllCars();
return View(carFan);
} [HttpPost]
public ActionResult SaveCars(CarFan carFan)
{
//if (ModelState.IsValid)
//{
// foreach (var item in carFan.SelectedCars)
// {
// //TODO:把选中的Car的编号和CarFan保存到中间表
// }
//}
ViewBag.allcars = GetAllCars();
return View(carFan);
} private IEnumerable<SelectListItem> GetAllCars()
{
List<SelectListItem> allCars = new List<SelectListItem>();
allCars.Add(new SelectListItem() { Value = "1", Text = "奔驰" });
allCars.Add(new SelectListItem() { Value = "2", Text = "宝马" });
allCars.Add(new SelectListItem() { Value = "3", Text = "奇瑞" });
allCars.Add(new SelectListItem() { Value = "4", Text = "比亚迪" });
allCars.Add(new SelectListItem() { Value = "5", Text = "起亚" });
allCars.Add(new SelectListItem() { Value = "6", Text = "大众" });
allCars.Add(new SelectListItem() { Value = "7", Text = "斯柯达" });
allCars.Add(new SelectListItem() { Value = "8", Text = "丰田" });
allCars.Add(new SelectListItem() { Value = "9", Text = "本田" }); return allCars.AsEnumerable();
}
显示<select multiple="multiple"...></select>的时候,需要一个IEnumerable<SelectListItem>类型的集合,我们通过ViewBag把该类型集合传递到前台视图。
打上[HttpPost]的SaveCars(CarFan carFan)方法内部,在实际项目中,本该是需要遍历所有选中汽车品牌的Id,把CarFan的Id和汽车品牌的Id保存到两者的中间表的,但这里为了方便,保存成功后还是回到原先的/Fan/SaveCars.cshtml视图,把选中的项显示出来。
/Fan/SaveCars.cshtml 视图
@model MvcApplication1.Models.CarFan
@{
ViewBag.Title = "SaveCars";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<link href="~/Content/chosen.css" rel="stylesheet" />
<h2>@Model.Name 感兴趣的汽车品牌包括:(最多选择2个)</h2>
@using (Html.BeginForm("SaveCars", "Fan", FormMethod.Post, new {id="editForm"}))
{
@Html.ListBoxFor(m => m.SelectedCars, (IEnumerable<SelectListItem>)ViewBag.allcars, new {@class="chosen", multiple="multiple", style="width:350px;"}) <br/>
<input type="submit" value="提交"/>
}
@section scripts
{
<script src="~/Scripts/chosen.jquery.min.js"></script>
<script type="text/javascript">
$(function() {
$('.chosen').chosen({
max_selected_options: 2
});
$(".chosen-deselect").chosen(
{
allow_single_deselect: true
});
$(".chosen").chosen().change();
$(".chosen").trigger('liszt:updated');
});
</script>
}
运行,在没有选择任何项时的界面如下:

当选择项,提交后,重新返回/Fan/SaveCars.cshtml视图,界面如下:

MVC实现多选下拉框,保存并显示多选项的更多相关文章
- MVC实现多选下拉框
借助Chosen Plugin可以实现多选下拉框. 选择多项: 设置选项数量,比如设置最多允许2个选项: 考虑到多选下拉<select multiple="multiple" ...
- 自定义SWT控件二之自定义多选下拉框
2.自定义下拉多选框 package com.view.control.select; import java.util.ArrayList; import java.util.HashMap; im ...
- Easyui-Combobox多选下拉框
因为工作需要,引入combobox多选下拉框,并且获取选择的值并以","分开. 效果如下: 代码如下: <html> <head> <title> ...
- Extjs4.2 多选下拉框
//多选下拉框 Ext.define('MDM.view.custom.MultiComboBox', { extend: 'Ext.form.ComboBox', alias: 'widget.mu ...
- js:jquery multiSelect 多选下拉框实例
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- DropDownList单选与多选下拉框
一.单选DropDownList传值 1.添加界面的DropDownList显示值问题 (1)在方法内添加ViewData的方法: var ad = new UnitsRepository(); Vi ...
- pentaho cde 自定义复选下拉框 checkbox select
pentaho 自带的component 虽多,但是当用户需要在一个表格中查看多个组别的数据时,pentaho自带的单选框就不能实现了,所以复选下拉框势在必行,实现效果如下: 实现原理是借用了jqu ...
- Bootstrap3级联多选下拉框
<!DOCTYPE html> <html> <head> <title>Bootstrap3级联多选下拉框</title> <met ...
- js怎么能取得多选下拉框选中的多个值?
方法:获取多选下拉框对象数组→循环判断option选项的selected属性(true为选中,false为未选中)→使用value属性取出选中项的值.实例演示如下: 1.HTML结构 1 2 3 4 ...
随机推荐
- MySQL基础 - 视图
创建视图: 假设要将posts表的前十条数据作为视图 mysql> CREATE VIEW view_test AS SELECT * FROM POSTS LIMIT 10; 使用: 可以把视 ...
- MEF实现设计上的“松耦合”(二)
介绍了下MEF的基础用法,让我们对MEF有了一个抽象的认识.当然MEF的用法可能不限于此,比如MEF的目录服务.目录筛选.重组部件等高级应用在这里就不做过多讲解,因为博主觉得这些用法只有在某些特定的环 ...
- CentOS7.5之Sqoop1.4.7的安装使用
一 Sqoop简介 Apache Sqoop(TM) 于 2012 年 3 月孵化出来,现在是一个顶级的 Apache 项目.是一种旨在有效地在 Apache Hadoop 和诸如关系数据库等结构化数 ...
- box-sizing定义的盒模型之间的区别
- vim选中多行复制粘贴
1.按v进入可视模式,移动光标选中需要复制的行: 2.使用y复制选中块到缓冲区(剪切选中块使用d): 3.将光标移动到粘贴的位置,按p即可. 复制多行并粘贴到指定位置后,可能需要进行多行缩进.多行缩进 ...
- 有关FPGA
在FPGA发展历史上,前后共有过超过50家厂商,在国外目前剩下不到10家,除赛灵思和ALTERA两家持续不断地军备竞赛,其它的都有着各自固守的市场定位.即使是有新进入者,例如受英特尔新工艺支 ...
- 基于五阶段流水线的RISC-V CPU模拟器实现
RISC-V是源自Berkeley的开源体系结构和指令集标准.这个模拟器实现的是RISC-V Specification 2.2中所规定RV64I指令集,基于标准的五阶段流水线,并且实现了分支预测模块 ...
- In 和Exists
1.exist,not exist一般都是与子查询一起使用. In可以与子查询一起使用,也可以直接in (a,b.....) 2.exist会针对子查询的表使用索引. not exist会对主子查询都 ...
- iOS Sprite Kit教程之滚动场景
iOS Sprite Kit教程之滚动场景 滚动场景 在很多的游戏中,场景都不是静止的,而是滚动的,如在植物大战僵尸的游戏中,它的场景如图2.26所示. 图2.26 植物大战僵尸 在图2.26中,用 ...
- C# 非模式窗体show()和模式窗体showdialog()的区别
对话框不是模式就是无模式的.模式对话框,在可以继续操作应用程序的其他部分之前,必须被关闭(隐藏或卸载).例如,如果一个对话框,在可以切换到其它窗 体或对话框之前要求先单击"确定"或 ...