Dropdownlist中用viewmodel传值处理方法

Posted 赵坤坤

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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" })

 


 

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

 

以上是关于Dropdownlist中用viewmodel传值处理方法的主要内容,如果未能解决你的问题,请参考以下文章

gridview中用dropdownlist更改值来筛选,更改dropdownlist之后无法进行checkbox选择

asp.net中用datatable给dropdownlist绑定数据

wpf MVVM Viewmodel之间传值

在ASP.NET中用for给DropDownList1赋值15-45所有数,怎么编写程序

MVC4.0中ViewBagViewDataTempData和ViewModel几种传值方式的区别

[moka同学笔记]yii2.0 dropdownlist的简单使用