分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

asp.net mvc 下拉列表

发布时间:2023-09-06 01:07责任编辑:顾先生关键词:暂无标签

第一步:新建一个格式化下拉列表的公共类文件

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[0]; ???????????if (null != ds && ds.Rows.Count > 0) ???????????{ ???????????????//添加一列 ???????????????ds.Columns.Add("Level", typeof(int)); ???????????????// 克隆dt 的结构,包括所有 dt 架构和约束,并无数据 ???????????????DataTable newDT = ds.Clone(); ???????????????DataTable catelist = Common.GetTreeList(ds, newDT, 0, 0); ???????????????if (catelist.Rows.Count > 0) ???????????????{ ???????????????????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"]) + 1) + Convert.ToString(row[name]); ???????????????????????if (Id == Convert.ToInt32(item.Value)) ???????????????????????{ ???????????????????????????item.Selected = true; ???????????????????????} ???????????????????????list.Add(item); ???????????????????} ???????????????????SelectListItem first = new SelectListItem(); ???????????????????first.Text = "--父类--"; ???????????????????first.Value = "0"; ???????????????????list.Insert(0, first); ???????????????????return list; ???????????????} ???????????} ???????????return null; ???????}
???????//无层级结构 ???????public static IList<SelectListItem> GetDropdownList2(IList listInfo, int? Id, string name) ???????{ ???????????if (listInfo.Count > 0) ???????????{ ???????????????DataTable ds = Common.ToDataSet(listInfo).Tables[0]; ???????????????if (null != ds && ds.Rows.Count > 0) ???????????????{ ???????????????????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 = "0"; ???????????????????list.Insert(0, 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 = 0) ???????{ ???????????for (int i = 0; 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 + 1); ???????????????} ???????????} ???????????return newDT; ???????} ???????/// <param name="str">字符串</param> ???????/// <param name="n">重复次数</param> ???????public static string StringRepeat(string str, int n) ???????{ ???????????if (String.IsNullOrEmpty(str) || n <= 0) ???????????????return str; ???????????StringBuilder sb = new StringBuilder(); ???????????while (n > 0) ???????????{ ???????????????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 > 0) ???????????{ ???????????????PropertyInfo[] propertys = p_List[0].GetType().GetProperties(); ???????????????foreach (PropertyInfo pi in propertys) ???????????????{ ???????????????????_DataTable.Columns.Add(pi.Name, pi.PropertyType); ???????????????} ???????????????for (int i = 0; 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 > 0) ???????????{ ???????????????//循环所有的分类找子类 ???????????????for (int i = 0; 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 下拉列表

原文地址:http://www.cnblogs.com/zouke1220/p/7462738.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved