代码改变世界

MVC3.0入门学习笔记-Razor-@Html.DropDownList

2012-04-06 11:12  通心菜  阅读(2273)  评论(3编辑  收藏  举报

最近刚学习使用mvc 遇到select问题 一个页面N多项select 编辑的时候如何让他选中我们指定的值成了一个问题 当然解决方法很多 js前台绑定 或者输出html的时候循环处理 现在我们使用@Html.DropDownList 来处理这个

网上搜索了下相关的 都是基于lambda表达式写的 看了头晕 lambda表达式我也不会 所以自己参考msdn 把这个功能实现了下

实际中可能有这样一种情况 某个select 的option是数据库字典里取出来的 展示到页面上的效果 如

<select style="width: 185px;" class="inputstyle1" id="ImportAmount" name="ImportAmount">
	<option value="0">请选择进口额</option>
	<option value="1">人民币10万元以下</option>
	<option value="2">人民币10万元-30万元</option>
	<option value="3">人民币30万元-50万元</option>
	<option value="4">人民币50万元-100万元</option>
	<option value="5">人民币100万元-200万元</option>
	<option value="6">人民币200万元-300万元</option>
	<option value="7">人民币300万元-500万元</option>
	<option value="8" selected="selected">人民币500万元-700万元</option>
	<option value="9">人民币700万元-1000万元</option>
	<option value="10">人民币1000万元-2000万元</option>
	<option value="11">人民币2000万元-3000万元</option>
	<option value="12">人民币3000万元-5000万元</option>
	<option value="13">人民币5000万元-1亿元</option>
	<option value="14">人民币1亿元以上</option>

</select>

 我们可以这样写

 IList<xxxx.Service.Model.DictionaryModel> certificationTypeModel = ViewData["importAmountModel"] as IList<xxxxx.Service.Model.DictionaryModel>;

Controllers

 IDictionaryService  IDict = new DictionaryService();

IList<DictionaryModel> importAmountModel= IDict.GetByDicType("moneyType");

 view

@{
    IList<xxxx.Service.Model.DictionaryModel> importAmount= ViewData["importAmountModel"] as IList<xxxx.Service.Model.DictionaryModel>;
 
}
<select id="ImportAmount" name="ImportAmount"> @foreach (var item in importAmount) { <option value="@item.Dickey">@item.DicName</option> } </select>

 然后页面就呈现了如上的html展示页现在有问题了 如果是编辑页面我们要对这个select进行赋值选中 方法有很多 可以用js去赋值 或者在 @foreach去做个判断 如

  <select id="ddlEnterpriseType" name="ddlEnterpriseType">
                           @foreach (ESunny.InfoPub.Service.Model.DictionaryModel item in dicEnterpriseType)
                           {
                               if (@Model.EnterpriseType == @item.Dickey)
                               {
                                    <option value="@item.Dickey" selected="selected">@item.DicName</option>
                               }
                               else
                               {
                                   <option value="@item.Dickey">@item.DicName</option>
                               }

                           }
                        </select>

 现在我们使用一个新的方法 在绑定的时候就赋值  @Html.DropDownList

Controllers

 IList<DictionaryModel> ImportAmountModel = IDict.GetByDicType("ImportAmountType");
            //ViewData["ImportAmountModel "] = new SelectList(ImportAmountModel , "绑定的key", "绑定的name", "这个填写要选中的值比如 model来自数据库 ");
ViewData["ImportAmountModel "] = new SelectList(ImportAmountModel , "Dickey", "DicName", model.ImportAmountType);

 view

//控制样式 或者id name等 参考重载方法 我们这里给这个select定义了样式class = "inputstyle1" 应为class是关键字 所以加上@符号转义下
@Html.DropDownList("actualCapitalUnit", ViewData["actualCapitalUnitModel"] as SelectList, new { @class = "inputstyle1" })
//简单点的
@Html.DropDownList("actualCapitalUnit")

 

最终展现的html也很干净 目的也达到了