当前位置: 首页 > news >正文

Dropdownlist中用viewmodel传值处理方法

背景:MVC框架,页面使用razor语法,下拉框的话使用了@Html.DropDownList(),以前传值使用viewdata,但是我们老大说这个方式比较low,希望我可以使用viewmodel的方式,没问题,我来改,首先建立viewmodel,把列表数据传入vm,把多个下拉的数据通过vm传递。


 

思考过程:既然是下拉那么数据就是key.value的键值对,我在vm中声明了list 

 public class VM_DepositSourceID
    {
        public int ID { get; set; }
        public string Name { get; set; }
    }
public List<VM_DepositSourceID> vm_depositsourceid { get; set; }

希望通过这样的方式来传递给前段,

cotroller:

vm_deposit.depositsourceid = this.CRMService.GetSourceList().Select(s => new { s.ID, s.Name });

但是我发现数据类型不对啊,

研究了半天后台整好了但是前台又不干了。

细细查看了dropdownlist这个插件,看到他要的数据就是IEnumerable<SelectListItem>

 public static MvcHtmlString DropDownList(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, string optionLabel, IDictionary<string, object> htmlAttributes)
        {
            ModelMetadata metadata = null;
            string expression = name;
            IEnumerable<SelectListItem> enumerable = selectList;
            string str2 = optionLabel;
            IDictionary<string, object> dictionary = htmlAttributes;
            return DropDownListHelper(htmlHelper, metadata, expression, enumerable, str2, dictionary);
        }

既然这样那我就不客气了,我可以把数据传到前台再转类型,但是传递过程数据太大也不好,那我就在后台处理一下数据,然后到了前台再转类型,传递数据的类型可以选择一个通用的object(使用的时候我还提心吊胆的,后来老大同意了,哈哈。)


 

具体实现

1: controller

vm_deposit.depositcreator = new SelectList(CreatorID.ToList(), "ID", "Name");
vm_deposit.depositpayment = new SelectList(EnumHelper.GetEnumDictionary<EnumCashRecordPayment>(), "Key", "Value");

2:数据类型

 public class VM_Deposit
    {
        /// <summary>
        /// 收银列表
        /// </summary>
        public List<DepositDetails> depositdetails { get; set; }
        /// <summary>
        /// 创建者
        /// </summary>
        public object depositcreator { get; set; }
        /// <summary>
        /// 支付类型
        /// </summary>
        public object depositpayment { get; set; }
    }

3:前段实现

@Html.DropDownList("Payment", Model.depositpayment as SelectList, "请选择", new { @id = "Payment", @class = "select2" })
@Html.DropDownList("CreatorID", Model.depositcreator as SelectList, "请选择", new { @id = "CreatorID", @class = "select2" })

 


 

后期有时间再补充以前的实现方案

 

转载于:https://www.cnblogs.com/zhaokunbokeyuan256/p/7070456.html

相关文章:

  • 玲珑杯 1137 - Sin your life(数学)
  • C#中将string转换为float
  • Java-Maven(四):Eclipse集成Maven环境配置
  • 产品学习笔记 一 产品文档
  • Swiper-轮播图
  • 猜拳游戏
  • 启动cassandra时“Local host name unknown...UnknownHostException”错误解决
  • Npm 使用淘宝镜像
  • js date对象
  • 软件151 朱永建 关于eclipse的环境配置
  • 搭建邮件服务器
  • jquery 滑动加载更多
  • 剑指Offer——树的子结构
  • 页面在360浏览器下的兼容性问题解决
  • Linux下MySQL5.7.18二进制包安装(无默认配置文件my_default.cnf)
  • 分享一款快速APP功能测试工具
  • 收藏网友的 源程序下载网
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【comparator, comparable】小总结
  • 08.Android之View事件问题
  • 30秒的PHP代码片段(1)数组 - Array
  • css选择器
  •  D - 粉碎叛乱F - 其他起义
  • Fabric架构演变之路
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Java反射-动态类加载和重新加载
  • uva 10370 Above Average
  • Vue UI框架库开发介绍
  • Vue2.x学习三:事件处理生命周期钩子
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 首页查询功能的一次实现过程
  • 网络应用优化——时延与带宽
  • 微服务入门【系列视频课程】
  • 新书推荐|Windows黑客编程技术详解
  • 用 Swift 编写面向协议的视图
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​secrets --- 生成管理密码的安全随机数​
  • #Linux(make工具和makefile文件以及makefile语法)
  • #QT(智能家居界面-界面切换)
  • #数学建模# 线性规划问题的Matlab求解
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)正点原子I.MX6ULL u-boot移植
  • (分布式缓存)Redis持久化
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (六)c52学习之旅-独立按键
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (小白学Java)Java简介和基本配置
  • (转)AS3正则:元子符,元序列,标志,数量表达符
  • (转)C#调用WebService 基础