起因

MVC项目中有数据字典表,定义了多个类型,需要给每个类型做下拉菜单。

不可能每个类型,都敲一个代码,需要做成通用

思路

  1. 利用MVC的部件方式,分别定义Controller,View和Model;
  2. Model的字段需要有:控件名称(WidgetName),数据字典类型(TypeName),选中的值(SelectedValue),数据集(SelectListItems)。需要根据数据字典类型去数据库表中过滤需要的类型,放入数据集中;
  3. View为部分页,Layout=null。

实现

1.Controller定义方法

public virtual ActionResult GetDropdownList(string widgetName, string selectedValue, string typeName)
{
DropdownListModel model = new DropdownListModel();
model.SelectedValue = selectedValue;
model.WidgetName = widgetName;
model.TypeName = typeName;
return View(model);
}

2.Model

public class DropdownListModel
{
/// <summary>
///选中值
/// </summary>
public string SelectedValue; /// <summary>
/// 控件名称
/// </summary>
public string WidgetName; /// <summary>
/// 值类型
/// </summary>
public string TypeName; /// <summary>
/// 状态列表SelectListItems
/// </summary>
public IList<SelectListItem> StateSelectListItems
{
get
{
IList<SelectListItem> selectListItems = new List<SelectListItem>(); IEnumerable<AttrInfo> attrList = WMFactory.Attr.FindByConditions(null, f => f.Code == TypeName); if (attrList.Count() > 0)
{
Guid attrId = attrList.First().Id;
IEnumerable<AttrEnumInfo> enumList = WMFactory.AttrEnum.FindByConditions(null, f => f.AttrId == attrId); foreach (AttrEnumInfo attrEnum in enumList)
{
SelectListItem selectListItem = new SelectListItem();
selectListItem.Value = attrEnum.AttrValue;
selectListItem.Text = attrEnum.AttrText;
selectListItems.Add(selectListItem);
}
} return selectListItems;
}
}
}

3.View

@{
Layout = null;
}
@model ZPS.FX.CRM.WebUI.Areas.ManageCenter.Models.Common.ProductTypeDropdownListModel
@if (!string.IsNullOrEmpty(Model.WidgetName))
{
//指定控件名称
@Html.DropDownListFor(m => m.SelectedValue, Model.StateSelectListItems, new { @id = Model.WidgetName, @Name = Model.WidgetName.Replace("_", "."), @class = "form-control" })
}
else
{
//没有指定控件名称
@Html.DropDownListFor(m => m.SelectedValue, Model.StateSelectListItems, new { @class = "form-control" })
}

使用方式

<div class="col-sm-4">
@Html.Action("GetDropdownList", "Common", new { widgetName = "BizDistrict_Type", selectedValue = (Model == null || Model.BizDistrict == null) ? "" : Model.BizDistrict.Type, typeName = "BizDistrictType" })
</div>

MVC创建通用DropdownList的更多相关文章

  1. 利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理

    利用反射和泛型把Model对象按行储存进数据库以及按行取出然后转换成Model 类实例 MVC网站通用配置项管理   2018-3-10 15:18 | 发布:Admin | 分类:代码库 | 评论: ...

  2. Spring mvc创建的web项目,如何获知其web的项目名称,访问具体的链接地址?

    Spring mvc创建的web项目,如何获知其web的项目名称,访问具体的链接地址? 访问URL:  http://localhost:8090/firstapp/login 在eclipse集成的 ...

  3. MVC创建XML,并实现增删改

    原文:MVC创建XML,并实现增删改 如果创建如下的XML: <?xml version="1.0" encoding="utf-8" standalon ...

  4. ASP.NET MVC创建的网站

    ASP.NET MVC创建的网站   最近在写一个网站,昨天刚写完,由于要和朋友一起测试,但是他电脑上没有环境,所以希望我在自己电脑上部署一下,让他直接通过浏览器来访问来测试,所以从昨晚到今天上午,通 ...

  5. 【翻译】在Visual Studio中使用Asp.Net Core MVC创建你的第一个Web API应用(一)

    HTTP is not just for serving up web pages. It's also a powerful platform for building APIs that expo ...

  6. 002.Create a web API with ASP.NET Core MVC and Visual Studio for Windows -- 【在windows上用vs与asp.net core mvc 创建一个 web api 程序】

    Create a web API with ASP.NET Core MVC and Visual Studio for Windows 在windows上用vs与asp.net core mvc 创 ...

  7. 使用 ASP.NET Core MVC 创建 Web API(五)

    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 使 ...

  8. 使用 ASP.NET Core MVC 创建 Web API(二)

    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 六.添加数据库上下文 数据库上下文是使用Entity Framewor ...

  9. 使用 ASP.NET Core MVC 创建 Web API(三)

    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 十 ...

随机推荐

  1. jQuery 分步引导 插件

    转自:http://blog.libnav.com/js/57.html 很多时候一个网站或者一个Web应用出品,为了让你的用户知道你的站点(或应用)有些什么?如何操作?为了让你的用户有更好的体验.往 ...

  2. HDU 5936 Difference 【中途相遇法】(2016年中国大学生程序设计竞赛(杭州))

    Difference Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  3. 算法 python实现(二) 冒泡排序

    首先说一下 冒泡排序 是怎么做的: 总体的想法是,把小的轻的浮上前面去,把大的重的沉到后面去. 这样设置两个指针,i j, 1. i标识每一趟循环.这一趟的目的是把后面那些未排序的数列中最小的浮上前面 ...

  4. JavaScript高级程序设计38.pdf

    比较DOM范围 在有多个范围的情况下,可以使用compareBoundaryPoints()方法来确认这些范围是否有公共的边界,接收两个参数:表示比较方式的常量值和要比较的范围 常量如下 Range. ...

  5. lightoj 1094 Farthest Nodes in a Tree 【树的直径 裸题】

    1094 - Farthest Nodes in a Tree PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: ...

  6. NavBarControl 左侧菜单

    (1)示例图片 具体实现: 一. using DevExpress.XtraNavBar; 二. 从窗体上拖一个 NavBarControl 控件 命名为:nbcLeft 三.窗体OnLoad 事件 ...

  7. struts2 表单处理

    在这篇教程里我们将探究如何处理表单提交.本文例子介绍: javabean存储表单数据 在action中重写validate方法进行简单的校验 创建一个struts2表单并和javabean匹配 jav ...

  8. DDoS deflate - Linux下防御/减轻DDOS攻击

    2010年04月19日 上午 | 作者:VPS侦探 前言 互联网如同现实社会一样充满钩心斗角,网站被DDOS也成为站长最头疼的事.在没有硬防的情况下,寻找软件代替是最直接的方法,比如用iptables ...

  9. Unicode与UTF-8互转(C语言实现)

    1. 基础 1.1 ASCII码 我们知道, 在计算机内部, 所有的信息最终都表示为一个二进制的字符串. 每一个二进制 位(bit)有0和1两种状态, 因此八个二进制位就可以组合出 256种状态, 这 ...

  10. jquery mobile图片自适应屏幕

    jquery mobile中如果不给img标签指定宽度的话,无法达到自适应屏幕的效果,特此备注:width:100%;