C# 自定义配置文件

学无止境,精益求精

十年河东,十年河西,莫欺少年穷

学历代表你的过去,能力代表你的现在,学习代表你的将来

配置文件有两种设置方式,第一种是直接在网站根目录下的web.config中设置;第二种方式是自定义配置文件,在web.config中指定其他配置文件的路径。

第一种:除了在常用的appSettings节点下进行<add/>添加,还可以在<configSections>节点下设置<section/>节点,

第二种:完全和web.config没有关联

关于第一种,大家可参考博客:https://www.cnblogs.com/len0031/p/7571594.html

本篇主要讲解第二种

我们都知道,在项目发布后,如果在生产环境修改配置文件,会重启IIS,这也就意味着会刷新所有服务,会影响用户的使用,导用户的操作失败。

因此,在大项目中,我们的许多配置除了使用配置文件外,还可以使用自定义的配置文件,这种配置文件修改时,不会影响用户的使用,这就是使用这类配置文件的好处。

其实,配置文件就是一个XML文件,所谓操作自定义配置文件其核心就是操作XML文件

我们在项目根目录新建一个SelectItem.config,如下:

<?xml version="1.0" encoding="utf-8"?>
<!--自定义配置文件,用于配置项-->
<config>
  <!-- 同种类型的验证码,每天最多的接收次数-->
  <dataConfig value="AuthCodeCount">10</dataConfig>
  <!-- 发送验证码后,有效时长(分钟)-->
  <dataConfig value="AuthCodeTime">2</dataConfig>
  <!-- 发送验证码后,JS控制效果时长(120秒)-->
  <dataConfig value="AuthCodeTimeLong">120</dataConfig>
</config>

那么如何读取这个文件呢?

在项目的公共方法层新建如下类:SelectItemConfig,用于读取XML文件,如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace Common
{
    public class SelectItemConfig
    {
        private XmlDocument _doc;
        private XmlNode _rootNode;

        public SelectItemConfig(String mapPath, string name)
        {
            _doc = new XmlDocument();
            _doc.Load(mapPath + name);
            _rootNode = _doc.DocumentElement;
        }

        public void setConfig(String key, String value)
        {
            if (value == null || (value != null && value.Length == 0)) { return; }

            if (_rootNode.SelectSingleNode(key) == null || (_rootNode.SelectSingleNode(key) != null && _rootNode.SelectSingleNode(key).ChildNodes.Count == 0))
            {
                XmlElement newNode = _doc.CreateElement(key);
                newNode.InnerText = value;
                _rootNode.AppendChild(newNode);
            }
            else
            {
                _rootNode.SelectSingleNode(key).ChildNodes[0].InnerText = value;
            }
        }

        /// <summary>
        /// 获取单个节点的值
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public String getConfig(string key)
        {
            if (_rootNode.SelectSingleNode(key) != null)
                if (_rootNode.SelectSingleNode(key).ChildNodes.Count > 0)
                    return _rootNode.SelectSingleNode(key).ChildNodes[0].Value;
                else
                    return "";
            else
                return null;
        }

        /// <summary>
        /// 获取key值对应的多个节点的值的集合
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public Dictionary<string, string> getItemListByKey(string key)
        {
            Dictionary<string, string> dic = new Dictionary<string, string>() { };
            if (_rootNode.SelectSingleNode(key) != null)
            {
                XmlNodeList xmlNode = _rootNode.SelectNodes(key);
                int nodeCount = _rootNode.SelectNodes(key).Count;
                if (nodeCount > 0)
                {
                    for (int i = 0; i < nodeCount; i++)
                    {
                        var item = _rootNode.SelectNodes(key).Item(i);
                        dic.Add(item.Attributes["value"].Value, item.InnerText);//Select 下拉框 Value属性
                    }
                }
            }
            return dic;
        }

        public Boolean SaveConfig(String mapPath)
        {
            try
            {
                _doc.Save(mapPath + @"FlexPaper.config");
                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}
View Code

用下面的方法读取某一个Key的值

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;

namespace Common
{
    public class SelectHelper
    {
        private static SelectItemConfig configManager;
        public static Dictionary<string, string> GetConfigByKey(string key, string name = "SelectItem.config")
        {
            string mapPath = HttpContext.Current.Server.MapPath("~/");
            configManager = new SelectItemConfig(mapPath, name);
            Dictionary<string, string> dic = configManager.getItemListByKey(key);
            return dic.OrderBy(p => p.Value).ToDictionary(o => o.Key, p => p.Value); ;
        }

        public static Dictionary<string, string> GetConfigByKeyForFields(string key, string name = "SelectItem.config")
        {
            string mapPath = HttpContext.Current.Server.MapPath("~/");
            configManager = new SelectItemConfig(mapPath, name);
            Dictionary<string, string> dic = configManager.getItemListByKey(key);
            return dic;
        }

        public static string GetFiled(string name)
        {
            Dictionary<string, string> dic = SelectHelper.GetConfigByKey("dataConfig");
            string Filed = string.Empty;
            foreach (var item in dic)
            {
                if (item.Key.ToLower() == name.ToLower())
                {
                    Filed = item.Value;
                    break;
                }
            }
            return Filed;
        }
    }
}
View Code

这样,就可以读取某一个值了,但是既然方法放在公共层,我们有必要建立一个公共类,用于获取对应自定义配置文件的属性,如下:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Text;

namespace Common
{
    /// <summary>
    /// Panda.Chen
    /// </summary>
    public class Constants
    {
        public static string AuthCodeCount = SelectHelper.GetFiled("AuthCodeCount");
        public static string AuthCodeTime = SelectHelper.GetFiled("AuthCodeTime");
        public static string AuthCodeTimeLong = SelectHelper.GetFiled("AuthCodeTimeLong");
    }
}
View Code

上述便是读取自定义配置文件某一个Key的方法,当然,我们还可以通过自定义配置文件来构造下拉框的选项,如下:

<?xml version="1.0" encoding="utf-8"?>
<config>
  <SupplierInfo value="SupplierName">供方名称</SupplierInfo>
  <SupplierInfo value="SupplierYear">注册年份</SupplierInfo>
  <!--上年度职工月平均工资(元/月)-->
  <monthSalary value="5580.00">5580.00</monthSalary>
  <!--全国城镇居民可支配收入(年/元)-->
  <yearSalary value="28844.00">28844.00</yearSalary>
  <!--年份-->
  <yearValue value="2016">2016</yearValue>
  <!--客户属性-->
  <kehushuxing value="">--请选择--</kehushuxing>
  <kehushuxing value="正式客户">正式客户</kehushuxing>
  <kehushuxing value="潜在客户">潜在客户</kehushuxing>


  <!--客户性质-->
  <kehuxingzhi value="">--请选择--</kehuxingzhi>
  <kehuxingzhi value="司机">司机</kehuxingzhi>
  <kehuxingzhi value="伤者">伤者</kehuxingzhi>
  <kehuxingzhi value="身故">身故</kehuxingzhi>


  <!--案件类型-->
  <anjianleixing value="">--请选择--</anjianleixing>
  <anjianleixing value="交通事故">交通事故</anjianleixing>
  <anjianleixing value="工伤">工伤</anjianleixing>
  <anjianleixing value="其他">其他</anjianleixing>


  <!--案件属性-->
  <anjianshuxing value="">--请选择--</anjianshuxing>
  <anjianshuxing value="垫付案件">垫付案件</anjianshuxing>
  <anjianshuxing value="非垫付案件">非垫付案件</anjianshuxing>

  <!--客户来源-->
  <kehulaiyuan value="">--请选择--</kehulaiyuan>
  <kehulaiyuan value="交警队">交警队</kehulaiyuan>
  <kehulaiyuan value="医生">医生</kehulaiyuan>
  <kehulaiyuan value="缘故">缘故</kehulaiyuan>
  <kehulaiyuan value="医院">医院</kehulaiyuan>
  <kehulaiyuan value="销售">销售</kehulaiyuan>
  <kehulaiyuan value="其他">其他</kehulaiyuan>


  <!--案件状态-->
  <anjianzhuangtai value="">--请选择--</anjianzhuangtai>
  <anjianzhuangtai value="待签">待签</anjianzhuangtai>
  <anjianzhuangtai value="已签">已签</anjianzhuangtai>
  <anjianzhuangtai value="放弃">放弃</anjianzhuangtai>
  <!--财务案件状态-->
  <CWanjianzhuangtai value="">--请选择--</CWanjianzhuangtai>
  <CWanjianzhuangtai value="结案">结案</CWanjianzhuangtai>
  <CWanjianzhuangtai value="坏账">坏账</CWanjianzhuangtai>
  <CWanjianzhuangtai value="退案">退案</CWanjianzhuangtai>


  <!--垫付方式-->
  <dianfufangshi value="">--请选择--</dianfufangshi>
  <dianfufangshi value="路救">路救</dianfufangshi>
  <dianfufangshi value="银行">银行</dianfufangshi>
  <dianfufangshi value="基金">基金</dianfufangshi>
  <dianfufangshi value="交强险">交强险</dianfufangshi>
  <dianfufangshi value="其他">其他</dianfufangshi>

  <!--发票是否分割-->
  <shifoufenge value="">--请选择--</shifoufenge>
  <shifoufenge value="是"></shifoufenge>
  <shifoufenge value="否"></shifoufenge>

  <!--客户信用-->
  <kehuxinyong value="">--请选择--</kehuxinyong>
  <kehuxinyong value="良好">良好</kehuxinyong>
  <kehuxinyong value="黑名单">黑名单</kehuxinyong>
  <!--劳动等级-->
  <LaoDongDJ value="">--请选择--</LaoDongDJ>
  <LaoDongDJ value="10级">10级</LaoDongDJ>
  <LaoDongDJ value="9级">9级</LaoDongDJ>
  <LaoDongDJ value="8级">8级</LaoDongDJ>
  <LaoDongDJ value="7级">7级</LaoDongDJ>
  <LaoDongDJ value="6级">6级</LaoDongDJ>
  <LaoDongDJ value="5级">5级</LaoDongDJ>
  <LaoDongDJ value="4级">4级</LaoDongDJ>
  <LaoDongDJ value="3级">3级</LaoDongDJ>
  <LaoDongDJ value="2级">2级</LaoDongDJ>
  <LaoDongDJ value="1级">1级</LaoDongDJ>
  <LaoDongDJ value="死亡">死亡</LaoDongDJ>
  <!--责任认定-->
  <zerenrending value="">--请选择--</zerenrending>
  <zerenrending value="全责">全责</zerenrending>
  <zerenrending value="主责">主责</zerenrending>
  <zerenrending value="同责">同责</zerenrending>
  <zerenrending value="次责">次责</zerenrending>
  <zerenrending value="无责">无责</zerenrending>
  <zerenrending value="无法认定">无法认定</zerenrending>
  <!--事故性质-->
  <shiguxingzhi value="">--请选择--</shiguxingzhi>
  <shiguxingzhi value="机动车与非机动车">机动车与非机动车</shiguxingzhi>
  <shiguxingzhi value="机动车与行人">机动车与行人</shiguxingzhi>
  <shiguxingzhi value="机动车与机动车">机动车与机动车</shiguxingzhi>
  <shiguxingzhi value="非机动车与非机动车">非机动车与非机动车</shiguxingzhi>
  <shiguxingzhi value="非机动车与行人">非机动车与行人</shiguxingzhi>
  <shiguxingzhi value="单车事故">单车事故</shiguxingzhi>


  <!--事故位置-->
  <shiguweizhi value="">--请选择--</shiguweizhi>
  <shiguweizhi value="十字路口">十字路口</shiguweizhi>
  <shiguweizhi value="丁字路口">丁字路口</shiguweizhi>
  <shiguweizhi value="同向道路">同向道路</shiguweizhi>
  <shiguweizhi value="相向道路">相向道路</shiguweizhi>
  <!--治疗方式-->
  <zhiliaofangshi value="">--请选择--</zhiliaofangshi>
  <zhiliaofangshi value="手术">手术</zhiliaofangshi>
  <zhiliaofangshi value="保守">保守</zhiliaofangshi>

  <!--科室-->
  <keshi value="">--请选择--</keshi>
  <keshi value="骨科">骨科</keshi>
  <keshi value="脑外科">脑外科</keshi>
  <keshi value="胸外科">胸外科</keshi>
  <keshi value="普外科">普外科</keshi>
  <keshi value="其他">其他</keshi>
  <!--是否需要二次手术-->
  <ercishoushu value="">--请选择--</ercishoushu>
  <ercishoushu value="手术">手术</ercishoushu>
  <ercishoushu value="非手术">非手术</ercishoushu>
  <!--医疗跟踪类型-->
  <yiliaogenzong value="">--请选择--</yiliaogenzong>
  <yiliaogenzong value="0">首次跟踪</yiliaogenzong>
  <yiliaogenzong value="1">复诊跟踪</yiliaogenzong>
  <!--材料收集状态-->
  <cailiaoshouji value="">--请选择--</cailiaoshouji>
  <cailiaoshouji value="收集完成">收集完成</cailiaoshouji>
  <cailiaoshouji value="二次收集">二次收集</cailiaoshouji>

  <!--是否精神会诊-->
  <isjshz value="">--请选择--</isjshz>
  <isjshz value="是"></isjshz>
  <isjshz value="否"></isjshz>
  <!--精神会诊鉴定所-->
  <jiandiansuo_jshz value="">--请选择--</jiandiansuo_jshz>
  <jiandiansuo_jshz value="广济司法鉴定所">广济司法鉴定所</jiandiansuo_jshz>

  <!--是否临床鉴定-->
  <islcjd value="">--请选择--</islcjd>
  <islcjd value="是"></islcjd>
  <islcjd value="否"></islcjd>

  <!--临床鉴定-鉴定所-->
  <jiandiansuo_lcjd value="">--请选择--</jiandiansuo_lcjd>
  <jiandiansuo_lcjd value="同济司法鉴定所">同济司法鉴定所</jiandiansuo_lcjd>
  <jiandiansuo_lcjd value="苏州大学司法鉴定中心">苏州大学司法鉴定中心</jiandiansuo_lcjd>
  <jiandiansuo_lcjd value="市立医院司法鉴定所">市立医院司法鉴定所</jiandiansuo_lcjd>
  <jiandiansuo_lcjd value="常熟市第一人民医院司法鉴定所">常熟市第一人民医院司法鉴定所</jiandiansuo_lcjd>
  <jiandiansuo_lcjd value="张家港市中医医院司法鉴定所">张家港市中医医院司法鉴定所</jiandiansuo_lcjd>
  <jiandiansuo_lcjd value="其他">其他</jiandiansuo_lcjd>

  <!--鉴定进程-->
  <jiandingJC value="">--请选择--</jiandingJC>
  <jiandingJC value="已鉴定">已鉴定</jiandingJC>
  <jiandingJC value="暂未鉴定">暂未鉴定</jiandingJC>

  <!--商业保险公司-->
  <InsurerGS value="">--请选择--</InsurerGS>
  <InsurerGS value="人保">人保</InsurerGS>
  <InsurerGS value="太保">太保</InsurerGS>
  <InsurerGS value="平安">平安</InsurerGS>
  <InsurerGS value="阳光">阳光</InsurerGS>
  <InsurerGS value="中华联合">中华联合</InsurerGS>
  <InsurerGS value="永诚">永诚</InsurerGS>
  <InsurerGS value="长安">长安</InsurerGS>
  <InsurerGS value="其他">其他</InsurerGS>

  <!--交强险保险公司-->
  <CompulsoryGS value="">--请选择--</CompulsoryGS>
  <CompulsoryGS value="人保">人保</CompulsoryGS>
  <CompulsoryGS value="太保">太保</CompulsoryGS>
  <CompulsoryGS value="平安">平安</CompulsoryGS>
  <CompulsoryGS value="阳光">阳光</CompulsoryGS>
  <CompulsoryGS value="中华联合">中华联合</CompulsoryGS>
  <CompulsoryGS value="永诚">永诚</CompulsoryGS>
  <CompulsoryGS value="长安">长安</CompulsoryGS>
  <CompulsoryGS value="其他">其他</CompulsoryGS>

  <!--垫付类型-->
  <DpayTypeSel value="">--请选择--</DpayTypeSel>
  <DpayTypeSel value="安泰">安泰</DpayTypeSel>
  <DpayTypeSel value="道路救援基金">道路救援基金</DpayTypeSel>
  <DpayTypeSel value="交强险">交强险</DpayTypeSel>
  <DpayTypeSel value="其他">其他</DpayTypeSel>

  <!--调解状态-->
  <TiaoJieZT value="">--请选择--</TiaoJieZT>
  <TiaoJieZT value="完成">完成</TiaoJieZT>
  <TiaoJieZT value="未完成">未完成</TiaoJieZT>
  <TiaoJieZT value="转诉讼">转诉讼</TiaoJieZT>

  <!--诉前准备状态-->
  <LawBeforeStatus value="">--请选择--</LawBeforeStatus>
  <LawBeforeStatus value="材料调取">材料调取</LawBeforeStatus>
  <LawBeforeStatus value="撰写诉状">撰写诉状</LawBeforeStatus>
  <LawBeforeStatus value="诉讼理算">诉讼理算</LawBeforeStatus>
  <LawBeforeStatus value="复印扫描">复印扫描</LawBeforeStatus>
  <LawBeforeStatus value="预收诉讼费">预收诉讼费</LawBeforeStatus>
  <!--诉讼期状态-->
  <LawStatus value="">--请选择--</LawStatus>
  <LawStatus value="案件移交">案件移交</LawStatus>
  <LawStatus value="立案">立案</LawStatus>
  <LawStatus value="传票">传票</LawStatus>
  <LawStatus value="开庭">开庭</LawStatus>
  <LawStatus value="文书送达">文书送达</LawStatus>

  <!--诉后结案状态-->
  <LawHANStatus value="">--请选择--</LawHANStatus>
  <LawHANStatus value="退款">退款</LawHANStatus>
  <LawHANStatus value="收费">收费</LawHANStatus>

  <!--是否还清-->
  <IsHuanQingSel value="">--请选择--</IsHuanQingSel>
  <IsHuanQingSel value="是"></IsHuanQingSel>
  <IsHuanQingSel value="否"></IsHuanQingSel>

  <!--是否-->
  <YesOrNo value="">--请选择--</YesOrNo>
  <YesOrNo value="是"></YesOrNo>
  <YesOrNo value="否"></YesOrNo>

  <!--公告事项-->
  <GongGaoSXSel value="">--请选择--</GongGaoSXSel>
  <GongGaoSXSel value="传票">传票</GongGaoSXSel>
  <GongGaoSXSel value="判决书">判决书</GongGaoSXSel>
  <GongGaoSXSel value="其他">其他</GongGaoSXSel>
  <!--诉讼结案方式-->
  <SSJATypSel value="">--请选择--</SSJATypSel>
  <SSJATypSel value="调解">调解</SSJATypSel>
  <SSJATypSel value="判决">判决</SSJATypSel>
  <!--预收诉讼费方式-->

  <YuShouSsfTyeSel value="">--请选择--</YuShouSsfTyeSel>
  <YuShouSsfTyeSel value="支付宝">支付宝</YuShouSsfTyeSel>
  <YuShouSsfTyeSel value="微信">微信</YuShouSsfTyeSel>
  <YuShouSsfTyeSel value="现金">现金</YuShouSsfTyeSel>
  <YuShouSsfTyeSel value="客户法院自缴">客户法院自缴</YuShouSsfTyeSel>
  <YuShouSsfTyeSel value="银行转账">银行转账</YuShouSsfTyeSel>
  <YuShouSsfTyeSel value="其他">其他</YuShouSsfTyeSel>


  <!--临时回访类型-->
  <visitTyp value="">--请选择--</visitTyp>
  <visitTyp value="首签案件回访">首签案件回访</visitTyp>
  <visitTyp value="医疗跟踪回访">医疗跟踪回访</visitTyp>
  <visitTyp value="伤残鉴定回访">伤残鉴定回访</visitTyp>
  <visitTyp value="材料收集回访">材料收集回访</visitTyp>

</config>
View Code

那么如何多去下拉选项呢?

如下:

    public class Anb_MainLawModel:BaseModel
    {
        public Dictionary<int, string> CustomerNumList = new Dictionary<int, string>();// 键值对  NodeId  案件名称
        public Dictionary<int, string> UserList = new Dictionary<int, string>();
        public Dictionary<int, string> IsOverList = new Dictionary<int, string>();
        public Dictionary<string, string> NodeList = new Dictionary<string, string>();
       
        public Dictionary<string, string> CourtList = new Dictionary<string, string>();//处理交警队
        //以上固定
        public Dictionary<string, string> LawStatus = new Dictionary<string, string>();//商业保险公司
        public Dictionary<string, string> GongGaoSXSel = new Dictionary<string, string>();//公告事项
        public Dictionary<string, string> YuShouSsfTyeSel = new Dictionary<string, string>();//公告事项
        //以上固定
        public StaticPagedList<MainLawModel> E_list = null;
        public Anb_MainLawModel()
        {

        }
        public Anb_MainLawModel(int page, int pagesize, string where)
        {
            int totalPage = 0;
            int recordCount = 0;
            var data = Pagination.getPageListForMainLaw("V_AnbMainLaw", "*", "YyfLawId desc", where, pagesize, page, out totalPage, out recordCount);

            E_list = new StaticPagedList<MainLawModel>(data, page, pagesize, recordCount);
            foreach (var item in E_list)
            {
                MainLawModel model = new MainLawModel();
                model = Mapper.DynamicMap<MainLawModel>(item);
                item.LiAnEmpIdString = Manger.GetUserInfo_2(Convert.ToInt32(model.LiAnEmpId)).EmployeeName;
                item.KaiTimeEmpIdString = Manger.GetUserInfo_2(Convert.ToInt32(model.KaiTimeEmpId)).EmployeeName;
            }
        }

        /// <summary>
        /// 当前登录人ID
        /// </summary>
        /// <param name="UserId"></param>
        public Anb_MainLawModel(int UserId, int CusId = 0)
        {
            CourtList = Information.GetCourtListByCompany(UserHelper.CurrentPrincipal.CompanyId);
            LawStatus = SelectHelper.GetConfigByKey("LawStatus");
            GongGaoSXSel = SelectHelper.GetConfigByKey("GongGaoSXSel");
            YuShouSsfTyeSel = SelectHelper.GetConfigByKey("YuShouSsfTyeSel");
            //
            var data = Procedure.Proc_Single_Anb_MainLaw(UserId, CommonEnum.NodeFun.Anb_MainLaw.ToString());
            if (data.Count() > 0)
            {
                foreach (var item in data)
                {
                    if (AnJian.checkAnJianNode(item.CustomerNum, CommonEnum.NodeFun.Anb_MainLaw.ToString()))
                        CustomerNumList.Add(item.AnJianNodeId, item.AnJianName);
                }
            }
            //
            UserInfoModel M = Manger.GetUserInfo_2(UserId);
            if (M != null)
            {
                UserList = Manger.GetEmployeeByCompany(M.CompanyId);
                //获取功能节点
                Array NodeAry = Enum.GetValues(typeof(CommonEnum.NodeFun));//"Array 类是支持数组的语言实现的基类。但是,只有系统和编译器能够从 Array 类显式派生。用户应当使用由语言提供的数组构造。"
                foreach (var item in NodeAry)
                {
                    string Key = item.ToString();
                    string Value = EnumHelper.GetDescription((Enum)item);
                    if (!(Key == CommonEnum.NodeFun.Anb_MainLaw.ToString() || Key == CommonEnum.NodeFun.Anb_AnJian.ToString()))
                    {
                        NodeList.Add(Key, Value);
                    }
                }
                Array OverAry = Enum.GetValues(typeof(CommonEnum.IsOver));//"Array 类是支持数组的语言实现的基类。但是,只有系统和编译器能够从 Array 类显式派生。用户应当使用由语言提供的数组构造。"
                foreach (var item in OverAry)
                {
                    int Key = (int)item;
                    string Value = EnumHelper.GetDescription((Enum)item);
                    IsOverList.Add(Key, Value);
                }
            }
        }
    }
View Code

HTML如下:

 <li>
        <label>劳动能力鉴定等级<span style="color: red;">*</span></label>
        <select id="GS_LDNLleave" name="GS_LDNLleave" ng-model="Anb.GS_LDNLleave" class="form-control">
            @foreach (var item in Model.LaoDongDJ)
            {
                <option value="@item.Key">@item.Value</option>
            }
        </select>
    </li>
    <li>
        <label>是否进行工伤登记<span style="color: red;">*</span></label>
        <select id="GS_Has" name="GS_Has" ng-model="Anb.GS_Has" class="form-control">
            <option value="">--请选择--</option>
            <option value="是"></option>
            <option value="否"></option>
        </select>
    </li>
View Code

好了,基本使用就这么多,谢谢

@陈卧龙的博客

原文地址:https://www.cnblogs.com/chenwolong/p/webconfig.html