asp.net mvc 下拉列表
第一步:新建一个格式化下拉列表的公共类文件
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web.Mvc; namespace GmkGM.Infrastructure
{
public class Common
{
/// <summary>
/// 获取下拉列表(有层级结构)
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
public static IList<SelectListItem> GetDropdownList(IList listInfo,int? Id,string name)
{
DataTable ds = Common.ToDataSet(listInfo).Tables[]; if (null != ds && ds.Rows.Count > )
{
//添加一列
ds.Columns.Add("Level", typeof(int));
// 克隆dt 的结构,包括所有 dt 架构和约束,并无数据
DataTable newDT = ds.Clone();
DataTable catelist = Common.GetTreeList(ds, newDT, , );
if (catelist.Rows.Count > )
{
IList<SelectListItem> list = new List<SelectListItem>();
foreach (DataRow row in catelist.Rows)
{
SelectListItem item = new SelectListItem();
item.Value = Convert.ToString(row["ID"]);
string pri = "----";
var rt = row["Level"];
item.Text = row[name] == DBNull.Value ? string.Empty : Common.StringRepeat(pri, Convert.ToInt32(row["Level"]) + ) + Convert.ToString(row[name]); if (Id == Convert.ToInt32(item.Value))
{
item.Selected = true;
} list.Add(item);
}
SelectListItem first = new SelectListItem();
first.Text = "--父类--";
first.Value = "";
list.Insert(, first);
return list;
}
}
return null;
}
//无层级结构
public static IList<SelectListItem> GetDropdownList2(IList listInfo, int? Id, string name)
{
if (listInfo.Count > )
{
DataTable ds = Common.ToDataSet(listInfo).Tables[]; if (null != ds && ds.Rows.Count > )
{
IList<SelectListItem> list = new List<SelectListItem>();
foreach (DataRow row in ds.Rows)
{
SelectListItem item = new SelectListItem();
item.Value = Convert.ToString(row["ID"]);
item.Text = row[name] == DBNull.Value ? string.Empty : Convert.ToString(row[name]); if (Id == Convert.ToInt32(item.Value))
{
item.Selected = true;
} list.Add(item);
}
SelectListItem first = new SelectListItem();
first.Text = "--父类--";
first.Value = "";
list.Insert(, first);
return list;
}
return null;
}
return null;
}
/// <summary>
/// 生成树形结构
/// </summary>
/// <param name="dt">数据源表</param>
/// <param name="newDT">返回的结果表</param>
/// <param name="Pid">父类ID值</param>
/// <param name="level">层级</param>
/// <returns></returns>
public static DataTable GetTreeList(DataTable dt, DataTable newDT, int Pid, int level = )
{
for (int i = ; i < dt.Rows.Count; i++)
{
if (Convert.ToInt32(dt.Rows[i]["Pid"]) == Pid)
{
//用来标记这个分类是第几级的
dt.Rows[i]["Level"] = level;
newDT.Rows.Add(dt.Rows[i].ItemArray);
//找子分类
DataTable innerDT = GetTreeList(dt, newDT, Convert.ToInt32(dt.Rows[i]["Id"]), level + );
}
}
return newDT;
} /// <param name="str">字符串</param>
/// <param name="n">重复次数</param>
public static string StringRepeat(string str, int n)
{
if (String.IsNullOrEmpty(str) || n <= )
return str;
StringBuilder sb = new StringBuilder();
while (n > )
{
sb.Append(str);
n--;
}
return sb.ToString();
}
// list转换为DataSet
public static DataSet ToDataSet(IList p_List)
{
DataSet result = new DataSet();
DataTable _DataTable = new DataTable();
if (p_List.Count > )
{
PropertyInfo[] propertys = p_List[].GetType().GetProperties();
foreach (PropertyInfo pi in propertys)
{
_DataTable.Columns.Add(pi.Name, pi.PropertyType);
} for (int i = ; i < p_List.Count; i++)
{
ArrayList tempList = new ArrayList();
foreach (PropertyInfo pi in propertys)
{
object obj = pi.GetValue(p_List[i], null);
tempList.Add(obj);
}
object[] array = tempList.ToArray();
_DataTable.LoadDataRow(array, true);
}
}
result.Tables.Add(_DataTable);
return result;
}
/// <summary>
/// 找出一个分类所有子分类的ID
/// </summary>
/// <param name="catId"></param>
///
/// <returns></returns>
public static DataTable GetChildren(DataTable dt, int catId)
{
//定义一个表存放保存找到的子分类的id
DataTable newDT = new DataTable();
//添加一列
newDT.Columns.Add("CID", typeof(int));
if (dt != null && dt.Rows.Count > )
{
//循环所有的分类找子类
for (int i = ; i < dt.Rows.Count; i++)
{
if (Convert.ToInt32(dt.Rows[i]["PID"]) == catId)
{
newDT.Rows.Add((Object)dt.Rows[i]["Id"]);
//再找这个$v的子分类
GetChildren(dt, Convert.ToInt32(dt.Rows[i]["Id"]));
}
}
}
return newDT;
}
}
}
第二步:服务层调用
public IList List2()
{
return db.Whse_Stock_List().ToList();
} public IList<SelectListItem> GetProductDropdownList(int? Id)
{
return Common.GetDropdownList2(List2(), Id, "ProductName");
} public IList List()
{
return db.Whse_Location_List().ToList();
} public IList<SelectListItem> GetLocationDropdownList(int? Id)
{
return Common.GetDropdownList(List(), Id,"Code");
}
第三步:控制器调用
// GET: Inventory/Create
public ActionResult Create()
{
#region 产品下拉列表
ViewBag.ProductTypes = new InventoryService().GetProductDropdownList(null);
#endregion #region 仓库位置下拉列表
ViewBag.LocationTypes = new InventoryService().GetLocationDropdownList(null);
#endregion return View();
}
[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult Create(Inventory model)
{
try
{
#region 产品下拉列表
ViewBag.ProductTypes = new InventoryService().GetProductDropdownList(model.StockID);
#endregion #region 仓库位置下拉列表
ViewBag.LocationTypes = new InventoryService().GetLocationDropdownList(model.LocationID);
#endregion //验证模型是否有效
if (ModelState.IsValid)
{
bool res = new InventoryService().Insert(model);
if (!res)
{
TempData[LastMessageInfoKey.LastErrorMessageTempDataKey] = "创建失败!";
return View(model);
}
TempData[LastMessageInfoKey.LastSuccessMessageTempDataKey] = "创建成功!";
return RedirectToAction("Index");
}
else
{
return View(model);
}
}
catch (Exception ex)
{
TempData[LastMessageInfoKey.LastErrorMessageTempDataKey] = ex.Message;
return View(model);
}
}
// GET: Inventory/Edit/5
public ActionResult Edit(int StockID, int LocationID)
{
InventoryModel Inventory = service.Get(StockID,LocationID); #region 产品下拉列表
ViewBag.ProductTypes = new InventoryService().GetProductDropdownList(StockID);
#endregion #region 仓库位置下拉列表
ViewBag.LocationTypes = new InventoryService().GetLocationDropdownList(LocationID);
#endregion return View(Inventory);
} [ValidateAntiForgeryToken]
[HttpPost]
public ActionResult Edit(Inventory model)
{
try
{
#region 产品下拉列表
ViewBag.ProductTypes = new InventoryService().GetProductDropdownList(model.StockID);
#endregion #region 仓库位置下拉列表
ViewBag.LocationTypes = new InventoryService().GetLocationDropdownList(model.LocationID);
#endregion //验证模型是否有效
if (ModelState.IsValid)
{
bool res = service.Update(model);
if (!res)
{
TempData[LastMessageInfoKey.LastErrorMessageTempDataKey] = "编辑失败!";
return View(model);
}
TempData[LastMessageInfoKey.LastSuccessMessageTempDataKey] = "编辑成功!";
return RedirectToAction("Index");
}
else
{
return View(model);
}
}
catch (Exception ex)
{
TempData[LastMessageInfoKey.LastErrorMessageTempDataKey] = ex.Message;
return View(model);
}
}
第四步:前端页面调用
@model GmkGM.Whse.Model.Inventory
@{
ViewBag.Title = "Create";
} @section styles{
@Styles.Render("~/bundles/form/css")
} @section scripts{
@Scripts.Render("~/bundles/form/js")
} @using (Html.BeginForm(null, null, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken() <div class="row">
<div class="col-xs-12">
<fieldset>
@Html.LabelFor(model => model.StockID)(必填)
@if (ViewBag.ProductTypes != null)
{
@Html.DropDownList("StockID", ViewBag.ProductTypes as IEnumerable<SelectListItem>, new { @class = "form-control" })
}
else
{
<select id="StockID" name="StockID" class="form-control"></select>
}
</fieldset>
<fieldset>
@Html.LabelFor(model => model.LocationID)(必填)
@if (ViewBag.LocationTypes != null)
{
@Html.DropDownList("LocationID", ViewBag.LocationTypes as IEnumerable<SelectListItem>, new { @class = "form-control" })
}
else
{
<select id="LocationID" name="LocationID" class="form-control"></select>
}
</fieldset> <fieldset>
@Html.LabelFor(model => model.Balance)(必填)
@Html.EditorFor(model => model.Balance, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Balance, "", new { @Style = "color:red" })
</fieldset>
</div>
</div>
<div class="form-actions center">
<button class="btn btn-sm btn-success" type="submit">
提交
<i class="ace-icon fa fa-arrow-right icon-on-right bigger-110"></i>
</button> <a class="btn btn-sm btn-warning" href="@Url.Action("Index")">
返回
<i class="ace-icon fa fa-undo bigger-110"></i>
</a>
</div>
}
asp.net mvc 下拉列表的更多相关文章
- ASP.NET MVC 下拉列表使用小结
ASP.NET MVC中下拉列表的用法很简单,也很方便,具体来说,主要是页面上支持两种Html帮助类的方法:DropDownList()和DropDownListFor().这篇博文主要作为个人的一个 ...
- ASP.NET MVC 下拉列表实现
https://blog.csdn.net/Ryan_laojiang/article/details/75349555?locationNum=10&fps=1 前言 我们今天开始好好讲讲关 ...
- ASP.NET MVC下使用AngularJs语言(六):获取下拉列表的value和Text
前面Insus.NET有在Angularjs实现DropDownList的下拉列表的功能.但是没有实现怎样获取下拉列表的value和text功能. 下面分别使用ng-click和ng-change来实 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点
在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...
- 翻译:使用 ASP.NET MVC 4, EF, Knockoutjs and Bootstrap 设计和开发站点 - 3
原文地址:http://ddmvc4.codeplex.com/ 原文名称:Design and Develop a website using ASP.NET MVC 4, EF, Knockout ...
- ASP.NET MVC 5 05 - 视图
PS: 唉,这篇随笔国庆(2015年)放假前几天开始的,放完假回来正好又赶上年底,公司各种破事儿. 这尼玛都写跨年了都,真服了.(=_=#) 好几次不想写了都. 可是又不想浪费这么多,狠不下心删除.没 ...
- ASP.NET MVC 初体验
MVC系列文章终于开始了,前段时间公司项目结束后一直在封装一个html+ashx+js+easyui的权限系统,最近差不多也完成了,迟些时候会分享源码给大家.当然这个MVC系列结束后如果时间允许还会另 ...
- 【第四篇】ASP.NET MVC快速入门之完整示例(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
随机推荐
- RunLoop想入门,看这篇就够了
前言 刚刚听到RunLoop的时候我也是一脸懵逼,这是什么,有什么用呢,逼格貌似还挺高.然后就开始尝试去搞懂它,去找博客,但是几乎所有的博客都是枯燥乏味的,都是讲概念,然后给个实例,对于我这个小白来说 ...
- .NET之RabbitMQ学习笔记(一)-应用场景
使用场景 1.异步处理 用户注册后,需要发注册邮件和注册短信,传统的做法有两种1.串行的方式;2.并行的方式 (1)串行处理方式:注册信息写数据库-发送注册邮件-发送注册短信,等上述三个操作都执行完成 ...
- AES高级加密标准简析
1 AES高级加密标准简介 1.1 概述 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区 ...
- 运行java web项目时报错:Several ports (8005, 8080, 8009) required
运行java web项目时报错:Several ports (8005, 8080, 8009) required 如下图 之所以报上面的错误是因为安装Tomcat的时候,已经把端口8005,8080 ...
- Thymleaf——工作笔记本
Thymleaf(工作笔记本) 1,循环遍历 th:each="li,information:${information}" 2,文本 th:text="${nu ...
- java 之 建造者模式(大话设计模式)
建造者模式,在笔者看来比较试用于,定制一个业务流程,而流程的细节又不尽相同,每个细节又必不可少,这时应考虑使用建造者模式. 大话设计模式-类图 先看下笔者写的一个简单的例子. /** * 所有建造过程 ...
- 【读书笔记】《Effective Java》——创建和销毁对象
Item 1. 考虑用静态工厂方法替代构造器 获得一个类的实例时我们都会采取一个共有的构造器.Foo x = new Foo(): 同时我们应该掌握另一种方法就是静态工厂方法(static facto ...
- 01---Spring框架
Spring框架简介及官方压缩包目录介绍 工厂模式 Spring环境搭建 IoC详解 Spring创建Bean的三种方式(包含两种工厂方式) scope属性讲解 DI详解 Spring中几种注入方式 ...
- mysql分区分表
为毛要分表和分区,,,,所有数据库的通病,文件越大,性能越低...那问题就来了.数据越多文件越大...无解?哎,所以说知道 为毛要分区了吧!那分表又是毛线?分表就是把一张表拆分成若干表,,,根据情况常 ...
- mysql 各数据类型的 大小及长度
数字型 类型 大小 范围(有符号) 范围(无符号) 用途 TINYINT 1 字节 (-128,127) (0,255) 小整数值 SMALLINT 2 字节 (-32 768,32 767) (0, ...