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" })


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

时间: 2025-01-17 09:56:09

Dropdownlist中用viewmodel传值处理方法的相关文章

webform 页面传值的方法总结

ASP.NET页面之间传递值的几种方式 页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值.存储对象传值.ajax.类.model.表单等.但是一般来说,常用的较简单有QueryString,Session,Cookies,Application,Server.Transfer. 一.QueryString QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于

DropdownList绑定的两种方法

动态绑定方法一:动态绑定数据库中的字段. SqlConnection conn = UtilitySqlClass.OperateDataBase.ReturnConn();string strSQL = "select * from CompanyType";SqlDataAdapter ada = new SqlDataAdapter(strSQL, conn);DataSet ds = new DataSet();ada.Fill(ds, "CompanyType&qu

UIWebView中Html中用JS调用OC方法及OC执行JS代码

1.HTML页面 1 <html> 2 3 <head> 4 5 <title>HTML中用JS调用OC方法</title> 6 7 <meta http-equiv="Content-Type"content="text/html; charset=UTF-8"> 8 9 <script> 10 11 function test() 12 13 { 14 15 alert("test

Java中用最有效率的方法算出2 乘以8 等於几?

Java中用最有效率的方法算出2 乘以8 等於几?2 << 3,因为将一个数左移n 位,就相当于乘以了2 的n 次方,那么,一个数乘以8 只要将其左移3 位即可,而位运算cpu 直接支持的,效率最高,所以,2 乘以8 等於几的最效率的方法是2 << 3.

JS实现HTML静态页传值的方法

JS实现HTML静态页传值的方法 作者:前端开发-武方博 发布:2012-10-29 分类:javascript 阅读:8,735次 此处使用JS方式实现静态页之间值传递,其实很简单,废话不多说,见代码,先看index.html页代码,如下: 在body标签之间 加此行代码 <form action=”a.html?d1=123&d2=你好” method=”post” name=”f1″ id=”f1″><input type=”submit” name=”s1″ id=”s1

ASP.NET页面传值的方法

ASP.NET页面传值的方法 From:Refresh-air 在面试的时候,经常会遇到这样的问题,其实我们会对其中的几种方法比较熟悉,因为项目中经常使用.但是要全面的回答ASP.NET中页面传值的方式,估计往往很难全面.一. 使用QueryString变量 QueryString是一种非常简单也是使用比较多的一种传值方式,但是它将传递的值显示在浏览器的地址栏中,如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法. Response.Redirect( "target.as

js获取url传值的方法

这篇文章主要介绍了js获取url传值的方法,实例分析了字符串分割与正则分析两种方法,并补充了一个基于正则匹配实现的js获取url的get传值函数,需要的朋友可以参考下 js获取url参数值: index.htm?参数1=数值1&参数2=数值2&参数3=数据3&参数4=数值4&...... 静态html文件js读取url参数 根据获取html的参数值控制html页面输出 一.字符串分割分析法 这里是一个获取URL带QUESTRING参数的JAVASCRIPT客户端解决方案,相

柴静在雾霾调查中用到的技术培训方法

这几天,柴静的雾霾调查<穹顶之下>非常热,我也看了一下,觉得可以作为技术培训的一个很好的案例.  之前,我是用戈尔的<不能忽视的真相>作为技术培训的模板,虽然好,但是毕竟是外国人做的,隔了一层,效果没有<穹顶之下>那么强.  吐个槽,从表现的方式看,我觉得柴静完全照抄了<不能忽视的真相>的表现方式,大会场.短片.flash动画片.图表等等,居然都能一一找到,不能不说是创造力的匮乏,毕竟<不能忽视的真相>快有10年历史了.  其实,我看到爱立信总裁

ios学习(界面传值的方法)

ios(学习)界面传值的方法 block: 实现界面传值的方法1.block: 实现界面传值,都是从第二个界面向第一个界面传值:第一种block 首先).在第二个界面secondViewController声明set方法 声明block @property (nonatomic,copy) void(^change)(UIColor *color); 其次).在.m文件实现 实现block的方法 _callback([UIColor redColor]);//注意这里之所以是_callback的