需求:用户根据自己的需求,配置下拉框中的字段。

解决思路:用户配置下拉框中的字段(例如:高级查询,基础信息),动态添加复选框控件。用户再对复选框进行勾选,最终结果是,基础信息中的,高级查询下拉框中为用户勾选的字段。

前台代码:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div class="location">
        当前位置:设置->:下拉框字段
    </div>
    <table style="width: 100%;" cellpadding="6" cellspacing="1" class="border">
        <tr>
            <td align="center" class="auto-style1">
                <asp:DropDownList ID="ddlFieldType" runat="server" Style="margin-left: 40px" Height="20px" Width="140px">
                </asp:DropDownList>
                <asp:DropDownList ID="ddlMenuIndex" runat="server" Style="margin-left: 60px" Height="20px" Width="140px" OnChange="javascript:SetData()">
                </asp:DropDownList>
            </td>
            <td></td>
        </tr>
    </table>
    <br />
    <br />

    <div id="divCheckBox">
    </div>


</asp:Content>


后台代码:

 //实例化系统设置外观
        Facade.SystemSetFacade systemSetFacade = new Facade.SystemSetFacade();
        protected void Page_Load(object sender,EventArgs e)
        {

            if (!Page.IsPostBack)               //判断页面是否第一次加载
            {
                //动态为下拉框添加字段
                sqlDataReader sdr = systemSetFacade.getMenu();
                ddlMenuIndex.DataSource = sdr;
                ddlMenuIndex.DataTextField = "menuChinesename";
                ddlMenuIndex.DataValueField = "menuEnglishname";
                ddlMenuIndex.DataBind();
                this.ddlMenuIndex.Items.Insert(0,"--请选择--");

                ListItem ListItem1 = new ListItem("高级查询","advancedQuery");
                ListItem ListItem2 = new ListItem("批量修改","largeModify");
                this.ddlFieldType.Items.Add(ListItem1);
                this.ddlFieldType.Items.Add(ListItem2);
                this.ddlFieldType.Items.Insert(0,"--请选择--");

                //AjaxPro.Utility.RegisterTypeForAjax(typeof(FieldSet));
            }
        }

实现界面:

用户配置好上图中的下拉框,页面动态创建多个。

动态添加控件的JS代码:

 </style>
    <script type="text/javascript"  charset="gbk" >

        //动态添加复选框
        function SetData() {
            
            var strMenuIndexID = document.getElementById("ctl00_ContentPlaceHolder1_ddlMenuIndex");     
            var strFieldTypeID = document.getElementById("ctl00_ContentPlaceHolder1_ddlFieldType");
            //用户选择的菜单项:基础信息等
            var strMenuIndexValue = strMenuIndexID.options[strMenuIndexID.selectedindex].value;
            //用户选择下拉框类别:高级查询、批量修改
            var strFieldTypeValue = strFieldTypeID.options[strFieldTypeID.selectedindex].value;
            //处理编号:多个ajax请求,为每一个进行编号
            var dealID = "001";
            //判断选择菜单项的下拉框是否为空
            if ("" == strMenuIndexValue) {
                alert("请选择菜单!");
            //判断选择下拉框类别的下拉框是否为空
            } else if ("" == strFieldTypeValue) {
                alert("请选择下拉框类别!");
            } else {

                //后台查询数据库,取得为添加复选框需要的数据
                $.ajax({
                    //get方式发送请求
                    type: "get",//将要访问FieldSet.ashx一般处理程序
                    //传递的参数有:处理编号,选择的菜单项,时间(为了避免获得缓存)
                    url: "FieldSet.ashx?dealID=" + dealID + "&strMenuIndexValue=" + strMenuIndexValue + "&t=" + new Date().getTime(),//将服务器返回的结果,以strjson接收
                    success: function (strjson) {
                        var obj = eval(strjson);
                        //开始创建复选框
                        addCheckBox(obj);
                    },error: function (XmlHttpRequest,textStatus,errorThrown) {
                        alert(XmlHttpRequest.responseText);
                    }
                });
            }
        }

        //添加复选框的方法
        function addCheckBox(obj) {
            var i;
            //var inHTML;

            //获得前台的div
            var insertDiv = document.getElementById("divCheckBox");
            //定义向前台插入的内容为空
            insertDiv.innerHTML = "";
            var chkinfo;
            var chkDIV;
            //var txtinfo;
            //解析从服务器获得的数据,循环添加复选框
            for (i = 0; i < obj.length; i++) {
                //为每一个复选框创建一个DIV
                chkDIV = document.createElement("div");
                //每一个复选框用input创建,类型为checkBox
                chkinfo = document.createElement("input");
                chkinfo.name = "checkBoxid";
                chkinfo.id = obj[i].chinesename;
                chkinfo.type = "checkBox";
                chkinfo.onclick = test;
                //将每一个chinesename为复选框赋值
                chkinfo.value = obj[i].chinesename;
               //将复选框添加到Div中
                chkDIV.appendChild(chkinfo);
                //为Div设置样式
                chkDIV.style.height = "50px";
                chkDIV.style.width = "150px";
                chkDIV.style.float = "left";
                chkDIV.align = "left";
                chkDIV.appendChild(document.createTextNode(obj[i].chinesename));
                //将创建的div添加到前台预留的DIV下
                insertDiv.appendChild(chkDIV);        
            }

            var strMenuIndexID = document.getElementById("ctl00_ContentPlaceHolder1_ddlMenuIndex");
            var strFieldTypeID = document.getElementById("ctl00_ContentPlaceHolder1_ddlFieldType");
            var strMenuIndexValue = strMenuIndexID.options[strMenuIndexID.selectedindex].value;
            var strFieldTypeValue = strFieldTypeID.options[strFieldTypeID.selectedindex].value;
            //处理编号
            var dealID = "002";
            //后台查询数据库,获取配置下拉框中目前存在的字段
            $.ajax({
                type: "get",url: "fieldSet.ashx?dealID=" + dealID + "&strMenuIndexValue=" + strMenuIndexValue + "&strFieldTypeValue=" + strFieldTypeValue+ "&t=" + new Date().getTime(),success: function (strjsonSelected) {
                    if (strjsonSelected != "") {
                        var obj = eval(strjsonSelected);
                        selectedFields = new Array(obj.length)
                        for (i = 0; i < obj.length; i++) {
                            //将下拉框中目前存在的字段进行勾选
                            (document.getElementById(obj[i].fieldName)).checked = true;
                        }
                    }
                }
            })
        }

        //动态向下拉框中配置字段
        var test = function updateField() {
            //动态向下拉框添加
            if (this.checked == true) {
                //(this.value+"true");
                var selectedFeild = this.value;
                var strMenuIndexID = document.getElementById("ctl00_ContentPlaceHolder1_ddlMenuIndex");
                var strFieldTypeID = document.getElementById("ctl00_ContentPlaceHolder1_ddlFieldType");
                var strMenuIndexValue = strMenuIndexID.options[strMenuIndexID.selectedindex].value;
                var strFieldTypeValue = strFieldTypeID.options[strFieldTypeID.selectedindex].value;
                //定义控件勾选状态变量
                var fieldSelectedState = "true";
                //处理编号
                var dealID = "003";
               //后台将用户勾选的字段,添加到数据库
                $.ajax({
                    type: "get",url: "fieldSet.ashx?dealID=" + dealID + "&strMenuIndexValue=" + strMenuIndexValue + "&strFieldTypeValue=" + strFieldTypeValue + "&selectedFeild=" + escape(selectedFeild) + "&fieldSelectedState=" + fieldSelectedState + "&t=" + new Date().getTime(),success: function (isInsert) {                     
                        if (isInsert == 'True') {
                            alert("下拉框成功添加此字段!");
                        }
                    }
                })
            }
            else {
                //alert(this.value + "false");
                var selectedFeild = this.value;
                var strMenuIndexID = document.getElementById("ctl00_ContentPlaceHolder1_ddlMenuIndex");
                var strFieldTypeID = document.getElementById("ctl00_ContentPlaceHolder1_ddlFieldType");
                var strMenuIndexValue = strMenuIndexID.options[strMenuIndexID.selectedindex].value;
                var strFieldTypeValue = strFieldTypeID.options[strFieldTypeID.selectedindex].value;

                var fieldState = "false";
                var dealID = "003";
                //用户取消勾,后台将删除此字段
                $.ajax({
                    type: "get",success: function (isDelete) {
                        if (isDelete == 'True') {
                            alert("下拉框成功删除此字段!");
                        }
                    }
                })
            }
        }
    </script>


后台一般处理程序代码:

public class FieldSet1 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            //context.Response.Write("Hello World");

            //实例化系统设置外观
            Facade.SystemSetFacade systemSetFacade = new Facade.SystemSetFacade();
            var dealID = context.Request.QueryString["dealID"];

            //后台读取数据库,为动态添加复选框提供数据
            if (dealID == "001")
            {

                string strMenuIndexValue = context.Request.QueryString["strMenuIndexValue"];
                DataTable dtFields = new DataTable();
                //查询下拉框课配置的字段
                dtFields = systemSetFacade.itemQuery(strMenuIndexValue);

                string strjson = DataTabletoJson("FieldsJson",dtFields);
                context.Response.Write(strjson);
                context.Response.End();

            }
             //后台查询数据库,返回下拉框中已存在的字段
            else if (dealID == "002")
            {
                string strMenuIndexValue = context.Request.QueryString["strMenuIndexValue"];
                string strFieldTypeValue = context.Request.QueryString["strFieldTypeValue"];
                int dtCount;
                DataTable dtSelectedFields = new DataTable();
                dtSelectedFields = systemSetFacade.itemSelectedQuery(strMenuIndexValue,strFieldTypeValue);
                dtCount = dtSelectedFields.Rows.Count;
                if (dtCount > 0)
                {
                    string strjsonSelected = DataTabletoJson("FieldsJson",dtSelectedFields);
                    context.Response.Write(strjsonSelected);
                    context.Response.End();
                }
                else
                {
                    string strjsonSelected = "";
                    context.Response.Write(strjsonSelected);
                }
            }
                //随着用户勾选、取消勾选,动态将数据添加到数据库中
            else if (dealID == "003")
            {
                string selectedFeild = context.Request.QueryString["selectedFeild"];
                string strMenuIndexValue = context.Request.QueryString["strMenuIndexValue"];
                string strFieldTypeValue = context.Request.QueryString["strFieldTypeValue"];
                string fieldSelectedState = context.Request.QueryString["fieldSelectedState"];
                //用户勾选复选框,将勾选字段添加到数据库中
                if (fieldSelectedState == "true")
                {
                    Boolean isInsert;
                    isInsert = systemSetFacade.insertField(strMenuIndexValue,strFieldTypeValue,selectedFeild);
                    context.Response.Write(isInsert);
                }
                //用户取消勾选,将取消勾选的字段从数据库中删除
                else
                {
                    Boolean isDelete;
                    isDelete = systemSetFacade.deleteField(strMenuIndexValue,selectedFeild);
                    context.Response.Write(isDelete);
                }

            }

        }

        //将从数据库中读取的表,转成Json
        public string DataTabletoJson(string jsonName,DataTable dt)
        {

            StringBuilder Json = new StringBuilder();
            Json.Append("[");
            if (dt.Rows.Count > 0)
            {
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    Json.Append("{");
                    for (int j = 0; j < dt.Columns.Count; j++)
                    {
                        Json.Append(dt.Columns[j].ColumnName.ToString() + ":\"" + dt.Rows[i][j].ToString() + "\"");
                        if (j < dt.Columns.Count - 1)
                        {
                            Json.Append(",");
                        }
                    }
                    Json.Append("}");
                    if (i < dt.Rows.Count - 1)
                    {
                        Json.Append(",");
                    }
                }
            }
            Json.Append("]");
            return Json.ToString();
        }


效果图:

基础信息——高级查询的下拉框:


至此,这动态配置下拉框字段暂且完成了。主要用Ajax来实现页面部分更新。通过这些,比较深刻的认识了Ajax。

AJAX——动态添加控件(复选框)的更多相关文章

  1. HTML5单选框、复选框、下拉菜单、文本域的实现代码

    这篇文章主要介绍了HTML5单选框、复选框、下拉菜单、文本域的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  2. HTML5、Select下拉框右边加图标的实现代码(增进用户体验)

    这篇文章主要介绍了HTML5、Select下拉框右边加图标的实现代码,深度美化页面增进用户体验效果,需要的朋友可以参考下

  3. ios – ipatool因异常而失败

    我正在导出企业部署的存档,我从ipatool获得了一个例外.我该如何解决这个问题?

  4. xcode4 – 重新启用XCode 4“Xcode启动时显示此屏幕”复选框.

    我设法取消选中Xcode4’显示这个屏幕,当Xcode启动’复选框,我想要它再次.这是如何实现的?除了“启动新项目”之外,Xcode4文档中还没有提到用户prefs中的任何内容.此外,Google上的任何地方似乎都没有任何问题.如果有人知道重新启用复选框的位置,请告诉我.再次感谢.V.V.解决方法选择窗口>欢迎使用主菜单中的Xcode,然后重新检查“显示此窗口…”

  5. 应用商店 – 自定义B2B应用的复选框未在iTunes连接中显示

    我想将一个应用程序作为自定义b2b应用程序带给AppleStore.唯一的问题是我的iTunes连接没有选项.这个B2B计划在德国不可用吗?我找不到任何具体的信息.也许你们中的一个有同样的问题.解决方法我有同样的问题,复选框不在那里.确保在iTunesConnect内您已经同意在“合同,税务和银行”下的相关合同.一旦你要求并同意这些,复选框应该出现.

  6. 应用程序关闭时的iOS任务

    我正在构建一个应用程序,通过ajax将文件上传到服务器.问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax调用.这可能是用户在离线时安排文件上传并关闭应用程序.应用程序关闭时可以进行ajax调用吗?

  7. Swift - 让StoryBoard设计视图,程序运行时都使用横屏形式

    1,运行时横屏将项目属性“General”->“DeviceOritentation”的Portrait复选框去掉2,storyboard设计视图横屏在storyboard中,单击中间界面视图的头部,在右侧属性面板中。把Size设置为iPhone4-inch把Orientation设置成Landscape

  8. 如何在swift(iOS)中创建单选按钮和复选框?

    我正在开发一个允许进行调查的应用程序。我的布局是从基于XML的问题生成的。我需要创建单选按钮(单选)和复选框。我没有发现任何有用的swift。有没有人有想法?对于无线电按钮和复选框,没有内置的东西。您可以轻松实施复选框。您可以为UIControlStatenormal的按钮设置一个uncheckedImage,并为您的UIControlStateSelected设置一个checkedImage。现在点击按钮将更改其图像,并在选中和未检查的图像之间交替显示。要使用单选按钮,您必须为您要作为单选按钮的所有按钮

  9. swift – 在Xcode 6.0.1中的Interface Builder中,“限制边缘”是什么意思

    我理解“间距到最近邻”的目的,但是“限制边缘”是什么意思?在特定控件按钮的边缘“间距到最近邻”之间有一个链接,同时检查名为“限制边缘”的复选框吗?Autolayout中此功能的作用是什么?

  10. android – 带复选框的ListView项目 – 如何删除复选框涟漪效应?

    我有一个带有项目的ListView包含一个复选框和一些其他元素.问题是,当我点击Android5设备上的列表项时,我看起来像这样:我不希望在复选框周围产生涟漪效应.我怎么能实现这一点?

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部