html写的三个下拉框,如下:

 <select name="ddlQYWZYJ" id="ddl_QYWZYJ" class="fieldsel" style="width: 200px;font-size:12px"  ></select>
<select name="ddlQYWZEJ" id="ddl_QYWZEJ" class="fieldsel" style="width: 200px;font-size:12px"></select>
<select name="ddlQYWZSJ" id="ddl_QYWZSJ" class="fieldsel" style="width: 200px;font-size:12px"></select>

要求1:加载页面时初始化一级下拉框,当一级下拉框点击取值后加载二级下拉框,点击二级下拉框后加载三级下拉框;

$(document).ready(function () {
//一级单位的下拉显示框
$.getJSON(rootPath + 'Dictionary/GetDicDataForSelect?idfield=ID&textfield=VALUE&' + "where=" + JSON2.stringify({
op: 'and',
rules: [{ field: 'PARENTID', value: , op: 'equal' }]
}), function (json) {
var lst = eval(json);
for (i = ; i < lst.length; i++) {
var tname = lst[i].text;
var tid = lst[i].id;
$("#ddl_QYWZYJ").append("<option value='" + tid + "'>" + tname + "</option>");
}
});
$("#ddl_QYWZYJ").click(function () {
GetQYWZYJData();
});
$("#ddl_QYWZEJ").click(function () {
GetQYMSData();
})
}) @* 一级下拉框值改变时触发加载二级下拉框*@
function GetQYWZYJData() {
var QYWZYJvalue = $('#ddl_QYWZYJ option:selected').val();//选中的文本
$.getJSON(rootPath + 'Dictionary/GetDicDataForSelect?idfield=ID&textfield=VALUE&' + "where=" + JSON2.stringify({
op: 'and',
rules: [{ field: 'PARENTID', value: QYWZYJvalue, op: 'equal' }]
}), function (json) {
$("#ddl_QYWZEJ").html("");//清空下拉框
$("#txt_QYMS").html("");//清空区域描述
var lst = eval(json);
for (var i = ; i < lst.length; i++) {
$("#ddl_QYWZEJ").append("<option value='" + lst[i].id + "'>" + lst[i].name + "</option>");
}
})
} @* 二级下拉框值改变时触发加载三级下拉框*@
function GetQYMSData() {
var QYWZEJvalue = $('#ddl_QYWZEJ option:selected').val();//选中的文本
if (QYWZEJvalue == null) return;
$.getJSON(rootPath + 'Dictionary/GetDicDataForSelect?idfield=ID&textfield=VALUE&' + "where=" + JSON2.stringify({
op: 'and',
rules: [{ field: 'ID', value: QYWZEJvalue, op: 'equal' }]
}), function (json) {
$("#ddl_QYWZSJ").html("");
var lst = eval(json);
for (var i = ; i < lst.length; i++) {
$("#ddl_QYWZSJ").append("<option value='" + lst[i].id + "'>" + lst[i].name + "</option>");
}
})
}

要求2:选择三个下拉框,分别把三个选中的text值保存在一个表(如XX表)中,当加载详情页面时,读取XX表中该记录保存的下拉框选中的text值,初始化三个下拉框

这时,需要注意的是option的value与text值。value是下拉框选项的取值,不显示在页面中;text为文本显示值,我们在页面中看到的是text值

针对下拉框select,我们建了一个实体类LigerUISelect。如下代码

    /// <summary>
/// LigerUI中Select的实体类
/// </summary>
public class LigerUISelect
{
#region - 属性 - /// <summary>
/// id
/// </summary>
public int id { get; set; }
/// <summary>
/// 显示内容
/// </summary>
public string text { get; set; } /// <summary>
/// 将实体转为为Select列表
/// </summary>
/// <param name="department"></param>
/// <returns></returns>
public static LigerUISelect ToViewModel(tbDictionary dict)
{
LigerUISelect item = new LigerUISelect();
item.id = dict.ID; //注意,select类的ID等于字典表记录ID字段
item.text = dict.VALUE; //select类的text等于字典表记录的Value字段
return item;
}
}

上面构造的select实体类中的属性id(对应option value)=dict.ID,和text(对应option text)=dict.VALUE。ID和text的值不一致,注意到代码出现一个字典表tbDictionary——dict.ID:字典ID,dict.VALUE:字典值;而保存在XX表的三个下拉框取值是option text值(即对应select实体类中的text值,也是对应字典表中的VALUE值)。

select初始化时,是根据option value来初始化值的,但是从数据库读取出的是option text值,所以匹配不上的话,则select初始化值不显示。因此,需要把读出的option text的值转化为option value

那么问题来了,如何转化呢?

前面已经说了,XX表保存的下拉框取值是option text,前面也提到,option text对应select实体类的text属性,也对应了字典表中的VALUE字段;option value对应了select实体类的ID属性,也对应了字典表ID字段。

因此,把option text转化为其option value,实质上就是在字典表中根据VALUE字段值找出其对应的ID值!

所以问题就简单了,如下代码即可转化:

DictionaryService和IDictionaryService分别是字典表tbdicitonary实体模型对应的BLL层中的构造函数及其接口函数。

 IDictionaryService areaService = new DictionaryService();
//根据值转换成对应的ID
data.QYYJ = areaService.GetEntity(p => p.VALUE == data.QYYJ) == null ?"" : areaService.GetEntity(p => p.VALUE == data.QYYJ).ID.ToString();

其实,针对要求2,还可以用一个更简单的方法实现。 LigerUI中Select实体类中的id和text的值写成一致即可。这样option value和option text值也一致,就能直接能初始化select值,不需要转化了。如下代码:

    /// <summary>
/// LigerUI中Select的实体类
/// </summary>
public class LigerUISelect
{
#region - 属性 - /// <summary>
/// id
/// </summary>
public string id { get; set; } /// <summary>
/// 显示内容
/// </summary>
public string text { get; set; } /// <summary>
/// 将实体转为为Select列表
/// </summary>
/// <param name="department"></param>
/// <returns></returns>
public static LigerUISelect ToViewModel(tbDictionary dict)
{
LigerUISelect item = new LigerUISelect();
item.id = dict.VALUE; //id和text都等于字典值VALUE
item.text = dict.VALUE;
return item;
}
}

前端View页面中对select的初始化语句:

function LoadData() {
LG.ajax(
{
url: rootPath1 + 'ReportsGenerate/GetCSBDataToUI',
loading: '正在加载...',
data: {
ID: ywid
},
success: function (result) {
if (!result) {
LG.showError("加载失败!");
return false;
}
else {
LoadControlData(result);
}
},
error: function (message) {
LG.showError("加载失败!");
}
})
} @*给控件赋值*@
function LoadControlData(result) {
document.getElementById('ddl_QYWZYJ').value = result.QYWZYJ;
document.getElementById('ddl_QYWZEJ').value = result.QYWZEJ;
document.getElementById('txt_QYWZSJ').value = result.QYWZSJ;
}

jquery+html三级联动下拉框及详情页面加载时的select初始化问题的更多相关文章

  1. jquery+html三级联动下拉框

    jquery+html三级联动下拉框及详情页面加载时的select初始化问题   html写的三个下拉框,如下: <select name="ddlQYWZYJ" id=&q ...

  2. jquery+ligerform三级联动下拉框

    如下为ligerform里的三级联动下拉框: var formData=[ {display:,width:,space:,type:"select",group:"区域 ...

  3. Android实现三级联动下拉框 下拉列表spinner

    Android实现(省.市.县)三级联动下拉框 下拉列表spinner 转载请注明出处: http://www.goteny.com/articles/2013/11/46.html http://w ...

  4. Web 1三级联动 下拉框 2添加修改删除 弹框

    Web  三级联动 下拉框 using System; using System.Collections.Generic; using System.Linq; using System.Web; u ...

  5. JS年月日三级联动下拉框日期选择代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 项目总结01:JSP mysql SpringMvc下中国省市县三级联动下拉框

    JSP mysql SpringMvc下中国省市县三级联动下拉框 关键词 JSP  mysql数据库  SpringMvc  ajax   Controller层  Service层  中国地区  省 ...

  7. JQ与AJAX 省市区三级联动下拉框

    用于初学者学习基本的联动下拉框,废话不多说,见代码 首先看控制器里的3个下拉框对应代码: public ActionResult GetProvinceList() { ProvinceReposit ...

  8. Android实现三级联动下拉框下拉列表spinner

    原文出处:http://www.cnblogs.com/zjjne/archive/2013/10/03/3350107.html 主要实现办法:动态加载各级下拉值的适配器 在监听本级下拉框,当本级下 ...

  9. JS(JQuery) 省市区三级联动下拉选择

    引入 area.js /* * 全国三级城市联动 js版 */ function Dsy(){ this.Items = {}; } Dsy.prototype.add = function(id,i ...

随机推荐

  1. jsp、Servlet相关知识介绍(转)

    1.servlet生命周期 所谓生命周期,指的是servlet容器如何创建servlet实例.分配其资源.调用其方法.并销毁其实例的整个过程. 阶段一: 实例化(就是创建servlet对象,调用构造器 ...

  2. RH253读书笔记(5)-Lab 5 Network File Sharing Services

    Lab 5 Network File Sharing Services Goal: Share file or printer resources with FTP, NFS and Samba Se ...

  3. DBA查询命令积累——不断更新

    原文:DBA查询命令积累--不断更新 一.服务器配置: 1.兼容级别:兼容级别只影响指定数据库中的行为,而不会影响整个服务器上的行为. 1.1.查看数据库兼容级别及更改兼容级别: SELECT com ...

  4. UVA10375 Choose and divide 质因数分解

    质因数分解: Choose and divide Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %l ...

  5. 续x奇数倍(n+2*x)暴力算法是冠军的算法结合数量

    // 续6单a,a+2,a+4,a+6,a+8,a+10是共同的数.最低要求a // 暴力解决方案 首先对结果,后面将代码粘贴: 1次连续n=9,连续值个数: 1;耗时: 0ms,总计: 0ms 2次 ...

  6. ExecutorService invokeAll 实例(转)

    10个班级,每个班级20名学生,在指定的时间内查询每个班级学生的集合. package cn.com.ld.study.thread; import java.util.ArrayList; impo ...

  7. 浅析Java中的final关键字(转)

    谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.下 ...

  8. 【ORACLE】使用数据泵的生产环境impd,expdp数据迁移

    ********************************************** ** 原文: blog.csdn.net/clark_xu  徐长亮专栏 **************** ...

  9. Dynamics CRM2013/2015 禁止欢迎屏幕(Disable the Welcome Screen)

    首先打开Dynamic CRM  2013将有一个欢迎界面的例子,下面的图,它不会为了图检查框出现.OK然后,下一次打开就没有. 可是当我们打开F12开发者工具,清除域的缓存后再次打开CRM,这个欢迎 ...

  10. Set <STL>

    set是维护集合的容器 #include <cstdio> #include <set> using namespace std; int main() { //声明 set& ...