ASP.NET MVC实现多选下拉框保存并显示

在"ASP.NET MVC实现多选下拉框"中,主要是多选下拉框的显示,而实际情况通常是:选择多个选项提交后,需要在编辑页把所有选中的项显示出来。

模拟这样的一个场景:一个车迷可能有多个自己喜欢的汽车品牌。

关于车迷的Model:

namespace MvcApplication1.Models
{
    public class CarFan
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string[] SelectedCars { get; set; }
    }
}

以上,在"ASP.NET 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="external nofollow"  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视图,界面如下:

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。如果你想了解更多相关内容请查看下面相关链接

(0)

相关推荐

  • ASP.NET MVC实现多选下拉框

    借助Chosen Plugin可以实现多选下拉框. 选择多项: 设置选项数量,比如设置最多允许2个选项: Model模块 考虑到多选下拉<select multiple="multiple"...></select>选中项是string数组,Model应该这样设计: using System.Collections.Generic; using System.Web.Mvc; namespace MvcApplication1.Models { public c

  • asp.net 自制的单选、多选列表实现代码

    问:为什么要"自制"?不是有现成的控件吗? 答:在ASP.NET的页面上,ListBox最终是渲染成select元素,而CheckListBox最终被渲染成div或者是table,使得二者的样式无法统一,或者说要统一很麻烦. 解决: 于是,决定干脆自行组合一些元素,实现单选列表.多选列表的统一样式. 首先,无论是单选列表还是多选列表,都用一个有边框的div来做容器: <div class="list"></div> 然后,在这个div中添加数

  • asp.net repeater实现批量删除时注册多选框id到客户端

    复制代码 代码如下: public static void prerepater(Repeater repeater,System.Web.UI.Page page) { ClientScriptManager cs = page.ClientScript; for (int i = 0; i < repeater.Items.Count; i++) { CheckBox cbx = (CheckBox)repeater.Items[i].FindControl("cbxId")

  • asp.net多选项卡页面的创建及使用方法

    看了很多朋友还不会创建多选项卡的页面,特地总结了一下用法,很简单的一看便知. 1.首先下载AjaxControlTookit包放置在Bin目录下,刷新解决方案. 2.页面引入(.aspx) 复制代码 代码如下: <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="asp" %> 3.控件调用(.aspx) 复制代码 代

  • asp.net批量多选文件上传解决方案

    多选文件上传,已经非常多了,选择性多了可能有时候要比较下哪个更合适,结合到项目中使用更方便才是最重要的.很多的多选上传基本上都是调用的swf文件,确实用flash 或flex开发一个多选上传的功能很方便,比如flex里内置的FileReferenceList对象本身就支持文件的多选,有这个的话就方便多了,下面要说的主要也是基于flex开发的一个多选上传功能. 主要实现的功能如下: 一.选择多个文件上传并显示单个文件的上传进度 二.显示所有文件总的上传进度 三.显示所有上传文件的总大小 四.上传前

  • Asp.net自定义控件之单选、多选控件

    本文实例为大家分享了Asp.net单选.复选框控件的具体实现代码,供大家参考,具体内容如下 将常用的jquery插件封装成控件也是个不错的选择. 先看看效果: 1.新建类库项目,创建数据源类 [Serializable] public class Select2Item { public bool Selected { get; set; } public string Text { get; set; } public string Value { get; set; } public Sel

  • ASP.NET MVC实现多选下拉框保存并显示

    在"ASP.NET MVC实现多选下拉框"中,主要是多选下拉框的显示,而实际情况通常是:选择多个选项提交后,需要在编辑页把所有选中的项显示出来. 模拟这样的一个场景:一个车迷可能有多个自己喜欢的汽车品牌. 关于车迷的Model: namespace MvcApplication1.Models { public class CarFan { public int Id { get; set; } public string Name { get; set; } public strin

  • 自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框

    先说点闲话,熟悉Angular的猿们会喜欢这个插件的. 00.本末倒置 不得不承认我是一个喜欢本末倒置的人,学生时代就喜欢先把晚交的作业先做,留着马上就要交的作业不做,然后慢悠悠做完不重要的作业,卧槽,XX作业马上要交了,赶紧补补补.如今做这个项目,因为没找到合适的多选下拉Web插件,又不想用html自带的丑陋的<select multiple></select>,自己花了一整天时间做了一个.或许这样占用的主要功能开发的时间,开发起来会更有紧迫感吧.感觉自己是个抖M自虐倾向,并且伴

  • 一个简单的jquery的多选下拉框(自写)

    今天做的项目要用到多选的下拉框,开始想在网上找一个插件用用,可是,网上的插件看起来都比较杂乱,我参考了网上的一些插件,自己用jquery写了一个多选下拉框,js写得比较简洁.代码如下. js代码 复制代码 代码如下: (function(){ $.fn.extend({ checks_select: function(options){ jq_checks_select = null; $(this).click(function(e){ jq_check = $(this); //jq_che

  • jquery.multiselect多选下拉框实现代码

    本文实例为大家分享了jquery.multiselect多选下拉框的实现方法,供大家参考,具体内容如下 第一步:链接下列文件,如果没有,到此网页下载 https://github.com/ehynds/jquery-ui-multiselect-widget,此插件基于jquery ,所以jquery的基本文件都需要引用 <link rel="stylesheet" type="text/css" href="~/Scripts/jquerymult

  • C# MVC 使用LayUI实现下拉框二级联动的功能

    一.layui.use 1.LayUI的官方使用文档:https://www.layui.com/doc/ 2.layui的内置模块不是默认就加载好的,必须要执行启动模块的这种方法后模块才会加载: 3.layui.use就是一种加载模块的方式. 如下代码: //LayUI渲染以及启动模块 layui.use(['form', 'layedit', 'laydate'], function () { var form = layui.form,//获取form模块 layer = layui.la

  • antd多选下拉框一行展示的实现方式

    我们都知道antd的select多选时,如果下拉框宽度不足,则自动浮动到下一行将下拉框撑大,但是这回影响到页面的整体布局. 我们期望的效果是,下拉框只显示一行的值,超出一行的部分自动隐藏. 下面有2种方案来实现这个效果. 1.利用浮动原理 设置下拉框的最大高度为一行的高度,然后超出的部分隐藏. .ant-select-selection--multiple { max-height: 32px; overflow: hidden; } 这种方式存在的弊端是如果有2个选项,一个很短一个很长,那么只

  • js实现下拉框选择要显示图片的方法

    本文实例讲述了js实现下拉框选择要显示图片的方法.分享给大家供大家参考.具体实现方法如下: <html> <title>下拉框选择要显示的图片</title> <body> <img width=320 height=240 src="images/m01.jpg" name="x1"> <SELECT onChange="document.x1.src=options[selectedIn

  • asp.net中js+jquery添加下拉框值和后台获取示例

    复制代码 代码如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script> <script type

  • jquery multiSelect 多选下拉框

    $("#id").multiSelect({ oneOrMoreSelected: '*',selectAll:false,noneSelected:'默认显示' }); Usage: $('#id').multiSelect( options, callback ) Options: selectAll - whether or not to display the Select All option; true/false, default = true selectAllText

随机推荐