更新记录

见证 FineUI 的进步历程,共 214 个版本更新。

v15.0 2026-06-28
+[Core/Pro]新增泛域名服务器授权,兼容之前的IP+MAC授权方式(企业版)。
	-生成的授权文件名类似:FineUICore.lic.dep.domain.fineui_com.config
-修复表格拖拽改变列宽度后,mouseup触发的click事件误触发列排序的问题(6976935)。
-Button新增语义颜色:Success(绿色)、Danger(红色)、Warning(橙色)、Info(蓝色),不随主题变化。
+主题系统从SCSS预编译重构为CSS自定义属性(CSS Variables)。
	-消除Sass编译依赖,不再需要sass等构建工具,并新增generate-theme.js构建脚本。
	-每个主题由theme.config(颜色配置)+ theme-extra.css(可选特有样式)定义。
	-自定义主题:在res/themes/下新建目录,复制已有theme.config修改颜色值,双击generate-theme.bat即可生成自定义主题。
+重构内部构建脚本。
	-内部打包bat脚本改为npm脚本编排。
	-使用esbuild统一替代terser(JS压缩混淆)和clean-css-cli(CSS压缩)。
	-FineUI.js组件层迁移到 ESM 模块化(不影响对外 API)。
	-ES2022 class extends 替代 John Resig Class.js(不影响对外 API)。
+为Notify新增DisplayProgress属性(bool?),用于关闭倒计时进度条显示(曹** - https://t.zsxq.com/ieFiS)。
	-为Web.config和PageManager增加全局配置项(MessageBoxDisplayProgress=true)。
-修正表格在SummaryPosition=Top/Bottom模式下,数据为空时合计行虽隐藏但仍占据布局空间,导致Grid底部出现空白带的问题。
-表格数据为空且未设置EmptyText时,显示内置的「图标+文案」空状态。
+表格新增ResponsiveCardSize属性:屏幕宽度小于指定断点时表格自动切换为卡片模式。
	-[JS]为表格新增属性responsiveCardSize,取值 sm(<768px)/md(<992px)/lg(<1200px);
	-[Core/Pro]新增枚举属性 GridResponsiveCardSize(None/SM/MD/LG)。
	-新增示例:布局/Block/响应式表格,并同步改造「响应式首页」中的表格示例。
+表格新增ShowPageSizeSelector属性(分页工具栏内置页大小下拉选择器)。
	-[JS]新增属性showPageSizeSelector(默认false)、pageSizeOptions(默认[10,20,50,100])、pageSizeText(标签文字)、pageSizeChangeResetsPageIndex(默认true)。
	-[JS]新增客户端事件pagesizechange/beforepagesizechange,签名(event, newPageSize, oldPageSize)。
	-[Core/Pro]新增相应属性和事件。
	-新增示例:表格/分页工具栏/页大小选择器(内存分页)、表格/分页工具栏/页大小选择器(数据库分页)。
#214
v13.1.1 2026-03-08
-[JS]修正客户端calcSummaryValue函数参数的兼容问题(Alan - https://t.zsxq.com/JnHQw)。
-[Pro]修正日期对象的RenderField列不能正确渲染时间的问题(STARK11号 - https://t.zsxq.com/6lzSW)。
+NumberBox新增NoWheel属性,支持禁止鼠标滚轮改变数值(控件级别和PageManager全局级别)(STARK11号 - https://t.zsxq.com/JRbjH)。
	-[JS]为滚轮事件增加加减触发图标的隐藏状态检查,触发图标隐藏时对应方向的滚轮也应失效。
-[JS]F.formatNumber新增第三个参数trimZero,支持对标准格式(N/F/P/E)结果的小数尾零自动省略(Hamny - https://t.zsxq.com/dJwQZ)。
	-尾零省略写法:fieldFormat: 'N2', trimZero: true(JS端);TrimZero="true"(Pro/Core端)。
	-RenderField新增TrimZero属性(bool),仅 Renderer=Number 时有效,省略数字尾零。
	-新增示例:表格/杂项/数字格式化字符串(尾零省略)。
-[Pro/Core]RenderField的Date/Number列改为生成fieldFormat属性而非renderer函数(和JS端保持一致)。
	-[JS]优化F.formatDate函数,允许二次渲染(传入字符串已是目标格式时直接返回,比如F.formatDate("20:30","HH:mm"))。
-[JS]修正dayjs解析日期时,双字母格式(MM/DD等)无法解析单个数字的月份或者日期的问题(Alan - https://t.zsxq.com/PsdU6)。
	-在客户端的F.parseDate函数中,将MM和DD分别替换为M和D,使单个数字的月份或者日期也能正确解析(STARK11号 - https://t.zsxq.com/mZlL6)。
#213
v13.1.0 2026-01-06
+[Core]将表格列的FieldFormat属性改名为DateParseString属性(不兼容提醒)。
	-DateParseString属性用来解析日期字符串:当FieldType=Date时,如果数据是字符串类型,则按照DateParseString将字符串解析为日期对象。
	-[JS]客户端代码中,表格列的fieldFormat属性有特定用途。
		-如果未定义列的渲染函数renderer,则根据fieldType的类型生成相应的渲染函数,仅支持日期和数字两种字段类型。
		-对于日期类型,如果未定义renderer,则自动生成列渲染函数为:F.format.dateRenderer(column.fieldFormat)
		-对于数字类型,如果未定义renderer,则自动生成列渲染函数为:F.format.numberRenderer(column.fieldFormat)
	-更新示例:表格/杂项/日期列(字符串数据,DateParseString)。
+为表格的RenderField列增加属性StoreDateAsString(默认为true)。
	-在表格的客户端数据中,将日期对象存储为格式化后的字符串(使用RendererArgument定义的格式化字符串)。
	-观察表格“入学日期”列中单元格的值:var entranceDate=F.ui.Grid1.getCellValue(0, "EntranceDate"),如下几个表达式都为true。
		-之前:(entranceDate instanceof Date); (entranceDate.toLocaleDateString()==='2000/9/2');
		-现在:(typeof(entranceDate)==='string'); (entranceDate === '2000/09/02');
	-可以通过全局配置项(GridStoreDateAsString=false)来关闭此功能。
-始终保持表格中静态复选框的颜色为红色(未选中)或者绿色(选中)。
-为文件上传控件新增GetPostedFileBytes方法,用来将上载文件的内容转换为字节数组(SYL - https://t.zsxq.com/wOseB)。
+修正存在按钮徽标文本的Processing动画轮廓(椭圆形而非正圆形)和缩放比例(将最大比例由2.4减少为1.6,效果更加美观)。
	-更新示例:表单/按钮控件/按钮徽标。
-[JS]为FineUI.Menu控件新增itemclick(event, menuItem)事件(点击菜单项时触发,menuItem表示当前点击的菜单项对象)。
-修正工具栏中的FileUpload控件,设置固定宽度后上传按钮位置错位的问题(狗尾巴草 - https://t.zsxq.com/LO8ij)。
+修正列锁定相关问题。
	-单元格编辑时,单元格的红点标识(.f-grid-cell-dirty)和列锁定分割线样式冲突。
	-多表头时,隐藏最后一个二级表头锁定列时,会导致列锁定分割线样式问题。
+允许行扩展列和树表格共存(一鸣 - https://t.zsxq.com/ShTpd)。
	-如果同时启用行扩展列的ExpandOnDblClick属性和树表格的TreeExpandOnDblClick属性,则默认禁用行扩展列的ExpandOnDblClick属性。
	-[JS]行扩展列的展开状态由f-expanded改为f-grid-rowexpander-expanded,行分组的展开状态由f-expanded改为f-grid-rowgroup-expanded。
	-新增示例:表格/树表格/杂项/树表格(行扩展列)。
+[Core-RazorForms]在页面回发事件中可以使用Grid1.FindCommand函数(gaodr - https://t.zsxq.com/fp30x)
	-注意:不支持在后台事件中修改GridCommand实例的属性,参考示例:表格/行命令/行命令(禁用行命令)。
+[JS]将客户端脚本使用的日期解析和格式化库由fecha替换为dayjs(不影响FineUI对外提供的接口方法)。
	-不影响接口方法FineUI.formatDate和FineUI.parseDate的使用(https://fineui.com/js/api/FineUI.html#.parseDate)。
	-使用最新的dayjs v1.11.18(包含customParseFormat插件,用来支持日期格式化字符串)。
	-fecha库已经不再维护(最后一次更新是2021年),而dayjs库是MIT协议,维护活跃,并被社区广泛使用(与moment.js高度兼容)。
-[Core-RazorForms]修正为无标题栏面板定义Tool控件后导致回发出错的问题(三十 - https://t.zsxq.com/CZDRz)。
+增强RenderField的RendererArgument属性,可以指定单元格的数字格式化字符串(木南 - https://t.zsxq.com/xbViy,郭樵夫 - https://t.zsxq.com/JbJzf)。
	+为Renderer新增Number枚举值(通过RendererArgument来指定数字格式化字符串),支持的数字格式规则:
		-千分位格式('N2': 2位小数,例: 12345.6789 → "12,345.68")
		-定点数格式('F2': 2位小数,例: 12345.6789 → "12345.68")
		-百分比格式('P2': 2位小数,例: 0.1234 → "12.34%")
		-科学计数法格式('E4': 4位小数,例: 12345.6789 → "1.2346E+4")
		-十进制整数格式('D5': 填充到5位,例: 123 → "00123")
	+[JS]新增客户端方法formatNumber,用来格式化数字(例如:FineUI.formatNumber(0.1234, 'P2'); // "12.34%")。
		-数字格式规则详情和参考示例:https://fineui.com/js/api/FineUI.html#.formatNumber
	-新增示例:表格/杂项/数字格式化字符串(RendererArgument)。
+为RenderField新增SummaryTypeArgument属性,用来指定合计值的数字格式化字符串。
	-此属性仅在启用客户端合计(SummaryType)时有效(和RendererArgument支持的格式一致)。
	-[JS]更新表格的客户端函数calcSummaryValue(新增可选参数summaryTypeArgument)。
	-新增示例:表格/合计行/合计行(客户端,数字格式化字符串)。
	-更新示例:表格/合计行/合计行(客户端,多行合计)。
+优化树控件的微型模式。
	-微型模式下弹出标准的菜单Menu(而不是自定义的树面板,因此废弃MiniModePopWidth属性)。
	-微型模式下默认显示顶层节点的文本(之前:默认只显示图标,不显示文本)。
	-微型模式下默认设置了宽度(.f-tree-minimode-listct{min-width: 60px;}),因此建议启用微型模式的宽度大于等于60px。
	-点击微型模式下的顶层节点时,会默认选中当前目录中的第一个子节点,并选中当前点击的顶层节点(之前:点击顶层节点无效果)。
	-切换首页框架右侧的主选项卡时,会自动切换左侧微型模型下选中的顶层节点。
+官网示例首页,定义侧边栏微型模式下的宽度。
	-在index.cs/Index.cshtml中使用C#代码定义侧边栏微型模式宽度(private int SIDEBAR_MINIMODE_WIDTH_CONSTANT = 70;)。
	-将此C#常量输出到页面,转换为CSS变量<style type="text/css">:root{--sidebar-minimode-width:70px;}</style>
	+在index.css中使用此CSS变量。
		-设置左侧侧边栏的宽度:.sidebarregion .f-tree-minimode-listct { min-width: var(--sidebar-minimode-width); }
	+在index.js中使用此CSS变量。
		-获取此CSS变量的值:var SIDEBAR_MINIMODE_WIDTH_CONSTANT = parseInt($('html').css('--sidebar-minimode-width'), 10);
		-折叠侧边栏时,设置微型模式的宽度:sidebarRegion.setWidth(SIDEBAR_MINIMODE_WIDTH_CONSTANT); treeMenu.loadData();
#212
v13.0.4 2025-11-25
-[Core-RazorForms]修正网址数据源表格加载出错的问题(Alan - https://t.zsxq.com/76V2D)。
-在表格的单元格编辑时,修正单元格左上角的红点未被锁定列遮盖的问题(笑疯 - https://t.zsxq.com/VIvwu)。
-修正单元格编辑时的下拉列表编辑框中,显示文本被右侧图标遮挡的问题(邮差病人 - https://t.zsxq.com/BgTva)。
+[Pro]修正Window控件的OnClientCloseButtonClick属性失效的问题(顾冉 - https://t.zsxq.com/rz5Ck)。
	-返回false可以阻止窗体关闭,例如:OnClientCloseButtonClick="return test();"
	-自定义客户端函数:function test() { alert('xxx'); return false; }
	-当然也可以通过注册beforeclose事件来实现相同的效果:<f:Listener Event="beforeclose" Handler="test" />
#211
v13.0.2 2025-10-22
-修改下拉框中表单字段没有回发的问题(仅限社区版)(Elwin - https://t.zsxq.com/o401T,老牛 - https://t.zsxq.com/ttl1A)。
-修正下拉多选标签的标签文本过长时关闭图标被挤出的问题(标签文本过长时显示省略号,确保关闭图标可见)(278140541)。
-修正日期选择框和日期范围选择框不支持用户手工输入的问题(Alan, STARK11号 - https://t.zsxq.com/0jdZP)。
+[Core-RazorForms]确保后台未定义事件处理函数(btnHello_Click)时,页面回发也不会出错(Hamny - https://t.zsxq.com/6hXlJ)。
    -比如手工调用__doPostBack,后台直接在Page_Load事件响应回发事件,验证示例:其他/自定义回发(__doPostBack)(Hamny - https://t.zsxq.com/dXNZ1)。
-公开树表格的checkRow、checkRows、uncheckRow和uncheckRows等客户端方法(罗挺Fighting - https://t.zsxq.com/sf50H)。
#210
v13.0.1 2025-10-15
+[JS]重构日期控件(Calendar和DatePicker)。
    -平铺显示日期和时间,隐藏时间面板的标题栏;层叠显示日期和时间,时间面板的标题栏文本改为“选择时间”。
    -优化日期和时间的选中样式(边框和背景同色)。
    -启用时间选择的日期控件,未设置初始值,此时选择某个时间(时分秒)会自动将日期(年月日)设为今天(确保选中的时间依附于具体的一个日期)。
    -只显示时间的日期选择框,不显示确定按钮时,改变时间(时分秒)会触发选择事件,但不会关闭弹出框(方便用户多次修改)。
+新增日期范围选择功能(Calendar和DatePicker)。
    +设计规则:
        -显式确定按钮(ShowConfirmButton)时,建议同时开启ConfirmToSelect属性,选择日期范围时不会触发选择事件,直到点击确定按钮才会触发选择事件。
        -两个日期面板是相邻月份,并且联动更新,选择的日期范围可以在一个日期面板内,也可以跨越两个日期面板,还可以跨越多个月份和年份。
        -开始相同和结束日期可以相同。
        -启用时间选择的日期范围,不支持日期和时间的平铺显示(此时StackDateTime属性不起作用)。
        -启用时间选择的日期范围,开始时间对应于较小的开始日期,结束时间对应于较大的结束日期。
        -启用时间选择的日期范围,未设置初始值,此时选择时间(时分秒)会自动将日期(年月日)设为今天(确保选中的时间依附于具体的一个日期)。
        -范围选择时,“今天/现在”按钮不起作用(ShowTodayButton)。
        -时间范围选择时,标题栏文本由“选择时间”分别改为“开始时间”和“结束时间”。
        -日期范围选择框(ShowTime=true),不显示确定按钮时,选中日期范围或者改变时间范围会触发选择事件,但不会关闭弹出框(方便用户多次修改)。
        -时间范围选择框,不显示确定按钮时,改变开始时间或者结束时间(时分秒)会触发选择事件,但不会关闭弹出框(方便用户多次修改)。
        -年份选择面板中,将左上角的起始年份设置为小于等于当前年份的最大15倍数的年份(比如2010、2025、2040、2055)。
    -为枚举类型CalendarDisplayType新增枚举值DayRange(日期范围选择),YearRange(年份范围选择),MonthRange(年月范围选择),TimeRange(时间范围选择)。
    -新增Calendar和DatePicker控件的属性:RangeStartDate(范围开始日期),RangeEndDate(范围结束日期),RangeSeparator(范围分隔符,默认为" - ")。
    -新增多个示例:表单/基本元素/日期范围/日期范围;(显式确定按钮);(选择时间);(只显示年份);(只显示月份)等。
    -新增多个示例:表单/输入框/日期范围选择框/日期范围;(显式确定按钮);(选择时间);(只显示年份);(只显示月份)等。
+[JS]重构下拉列表控件和下拉框控件。
    +将表单字段的bodyEl属性拆分为bodyEl和inputEl两个属性。
        -对于大部分表单字段,这两个属性是一样的;对于复选框和启用多选标签模式的下拉列表,这两个属性是不一样的。
    -多选可编辑模式,在输入框中通过回车键新增一个选中项后,再次点击回车键,会取消当前项的选中状态。
    +可编辑不强制选择模式,如果用户输入的文本可以正确匹配到值列表,则认为是选中项而不是用户手工输入的文本。
        -比如初始文本为"可选项1, 可选项5",用户修改为"可选项4, 可选项6",此时选中项为:"可选项4(Value4), 可选项6(Value6)"
    -多选模式,打开下拉列表时,默认使第一项获取焦点(方便用户按下回车键选中第一项)。
    +可编辑不强制选择模式,如果清空了选中项,并且没有手工输入的文本,则认为IsUserInput==false(不兼容提醒)。
        -这个逻辑更合理,此时用户的确没有输入任何文本;更新示例:表单/下拉列表控件/下拉列表(可编辑,用户输入值)。
+为下拉列表控件和下拉框控件增加多选标签模式。
    -新增MultiSelectMode属性,支持两种多选显示模式:Text(文本,默认值)、Tags(多选标签)。
    -新增tagclose事件,关闭某个标签时触发(仅在启用多选标签模式时有效)。
    -多选标签模式下,选中项以标签的形式显示在输入框中,点击标签旁边的关闭图标可以单独删除某个选中项。
    -新增多个示例:表单/下拉列表控件/多选标签模式/多选标签;(清空图标);(可编辑,强制选择);(可编辑,不强制选择)等。
    +[下拉列表控件]多选标签模式下(可编辑,不强制选择),允许下拉项和用户输入文本同时存在(约定用户输入值的前缀是"__USERINPUT")。
        -用户输入文本时,输入的文本会自动出现在下拉列表的第一项,并处于焦点状态,此时按下回车键可以选中此项(此项的值是动态生成的,比如"__USERINPUT_1")。
        +后台设置初始值(下拉项和用户输入文本同时存在),需要同时设置Text和Value两个属性。
            -示例:表单/下拉列表控件/多选标签模式/多选标签(可编辑,不强制选择,初始值)。
            -页面初始代码:DropDownList1.Text="可选项1, 可选项4, 初始自定义值1"; DropDownList1.Value="Value1, Value4, __USERINPUT_value1";
+[JS]优化树控件的checkNodes函数。
    -函数签名为checkNodes(nodes, options),其中options.keep表示是否保持已选中复选框的状态(默认为true),options.deep表示是否递归调用子节点(默认为false)。
        -注意区分:树的selectNodes(nodes,options)和表格的selectRows(rows,options),它们的options.keep的默认值是false,也就是说选中节点时会清空之前的节点选中状态。
        -注意区分:树的checkNodes(nodes,options),其options.keep的默认值是true,也就是说选中复选框时会保持之前已选中复选框的状态。
    -兼容之前的写法checkNodes(['node1','node2'], true),等价于checkNodes(['node1','node2'], {deep:true, keep:true})。
+表格列的表头菜单增强。
    -更新“锁定到左侧”和“锁定到右侧”两个菜单项的字体图标。
    -新增“隐藏列”菜单项。
    +表格列的显示与隐藏。
        -序号列、复选框列以及行扩展列都会显示在表头的列管理菜单中,用户可以控制这些列的显示和隐藏。
        -将序号列(RowNumberField)的EnableColumnHide属性默认值改为true。
        +隐藏全部列之后,会在表头右侧显示“管理列”按钮。
            -由于序号列、复选框列或者行扩展列没有表头菜单,如果仅剩下这三种列处于显示状态,也会显示“管理列”按钮。
    +[JS]为表格新增showColumnsMenu函数,可以用来显示内置的列管理菜单。
        -更新示例:表格/标题栏/列管理菜单。
+表格表头过滤的界面重构。
    -将操作符和输入框由水平布局改为垂直布局。
    +删除多条件过滤时的删除按钮和新增按钮,删除多条件匹配符下拉列表框(改为AND和OR两个单选分组按钮)。
        -将表格过滤(GridFilter)的ShowMatcher属性标记为Obsolete,默认会在多条件之间显示匹配规则,因此无需这个属性。
        -将属性EnableMultiFilter改名为EnableMultiConditions(是否启用多条件),新增属性MaxConditions(最大条件数,默认为2)。
        -默认只会显示一个条件,当输入先前的条件时,会自动新增一个条件(最多条件数由MaxConditions属性控制)。
    +在表头菜单项“重置过滤”下方新增“重置所有列过滤”,用来一键清除所有列的过滤条件。
        -通过菜单项或者客户端API(resetFilters)重置所有列过滤时,只触发一次filterchange事件。
+[Pro/Core-RazorForms]表格的表头过滤增强。
    -[Pro]删除回发过滤数据中的f_dataField、f_dataTextField等参数(如果需要,可以在后台代码中直接通过列实例获取)。
    +为表格列新增ColumnFilteredData属性。
        -新增两个类GridColumnFilteredData和GridColumnFilteredDataItem(分别表示表格列的过滤数据和单个过滤项)。
    +为官网示例项目新增帮助类NewFilteredTable,可以方便的设置初始过滤数据,以及在后台更新过滤数据。
        -新增示例:表格/表头过滤/过滤(初始值);(多条件,初始值);(最大条件数,初始值);(复杂示例,初始值)。
        -新增示例:表格/表头过滤/内联过滤/内联过滤(初始值);(下拉列表,多选,初始值);(复杂示例,初始值)。
-确保下拉复选框选中项的顺序能够反映用户的操作顺序,而不是其在页面节点中出现的先后顺序。(Alan - https://t.zsxq.com/3N78X)。
+表格启用KeepCurrentSelection属性时,点击行中的超链接标签不会取消选中行(STARK11号 - https://t.zsxq.com/FcbO5)。
    -确保点击行中的删除或者操作按钮时,不会出现第一次点击选中行,第二次点击取消行选中的问题。
-将枚举值JSLibrary.JQv1标记为已废除,这个属性是为了兼容IE浏览器,由于FineUI已不再支持IE浏览器,因此不需要这个属性。
-增加全局配置项TabStripAnimationType,用来设置选项卡切换的动画效果(可选项为SlideX、SlideY、Fade、Pop、Flip,默认值为SlideX)。
+[Core]修正后台获取文本框中的emoji文本出现乱码的问题(玄虹 - https://t.zsxq.com/7jmdT)。
    -第三方客户端Base64库的问题,已经替换为浏览器原生的atob函数、btoa函数和TextEncoder类。
    -验证示例:表单/输入框/文本框(自动回发),在输入框中输入字符串:测试表情 😀🎉,页面回发后Label标签会显示相同的文本。
+官网示例首页,在后台通过C#定义左侧菜单栏的宽度,并在视图标签、CSS和JavaScript中使用此常量。
    -文章:https://fineui.com/docs/#/Questions/11000_share_constant_view_css_js
-官网示例首页,为左侧菜单项新增Version属性,用来标识新增当前示例的版本号。
+为树控件引入了PersistNodes属性(木南 - https://t.zsxq.com/X1WFF)。
    -如果节点数很多并且无需在回发事件中访问Nodes、SelectedNode等属性或者FindNode()、GetCheckedNodes()等函数,可以禁用此属性。
    -类似于下拉列表的PersistItems属性,文章:https://fineui.com/docs/#/FineUICore_RazorForms/2000_PersistItems。
+[Core]修正未使用FineUICore中间件(Layout=null)的页面出错的问题(hs - https://t.zsxq.com/brWDM)。
    -对于未使用FineUICore中间件的页面,可以在appsettings.json中定义ExcludedURLs属性。
    -参考配置:{"FineUI":{"ExcludedURLs": ["/Home/DownloadFile","/ThirdParty/EChartsDynamicBarIFrame"]}}
+增强社区版功能。
    +下拉框控件社区版可用(40多个相关示例)。
        -包含下拉单选框列表、下拉复选框列表、下拉树和下拉表格,还可以自定义下拉框,支持用户输入值和新增的多选标签模式。
    -表单的表格样式社区版可用(10多个相关示例)。
    -树表格社区版可用(30多个相关示例)。
-FineUICore(RazorForms开发模式)在线示例数突破1000个(相比上个大版本v12新增80多个示例)(https://forms.fineui.com/)。
#209
v12.2.2 2025-09-18
+修正删除布局节点.f-layout-placeholder引入的问题,会影响工具栏和按钮分组等控件的布局(老牛 - https://t.zsxq.com/lTtSy)。
	-验证示例:导航/工具栏和菜单/工具栏布局(ButtonGroup)。
	+[JS]由于工具栏和按钮分组控件都是从FineUI.PanelBase继承而来,因此拥有面板的DOM层次结构(不兼容提醒)。
		-更新中将.f-toolbar-bodyct和.f-toolbar-body两处节点替换为.f-panel-bodyct和.f-panel-body。
		-如果自定义样式中用到了.f-toolbar-body,需要替换为:.f-toolbar .f-panel-body,或者精确定位:.f-toolbar > .f-panel-bodyct > .f-panel-body。
+[JS]优化选项卡的关闭逻辑。
	+为选项卡面板(F.TabStrip)新增多个客户端事件。
		-tabclose事件:单个选项卡关闭时触发。
		-tabsclose事件:全部可关闭的选项卡(closable==true)关闭时触发。
		-alltabsclose事件:全部选项卡关闭时触发。
	-优化客户端tabchange事件:切换选项卡时触发,事件参数tab表示当前激活的选项卡。
	-关闭非活跃的选项卡时,不会触发tabchange事件。
	+关闭活跃的选项卡时。
		-如果此选项卡是仅存的一个选项卡,则会触发一次tabsclose和alltabsclose事件。
		-如果还存在其他选项卡,则会尝试激活上一次活跃的选项卡,并触发tabchange事件。
	+选项卡右键菜单项 - 关闭其他标签。
		-如果光标所在的选项卡是活跃的选项卡,则不会触发tabchange事件。
		-如果光标所在的选项卡不是活跃的选项卡,则会激活此选项卡,并且只会触发一次tabchange事件。
	+选项卡右键菜单项 - 关闭全部标签。
		-如果存在不可关闭的选项卡(closable=false),则会触发一次tabsclose和tabchange事件。
		-如果都是可关闭的选项卡,则会触发一次tabsclose和alltabsclose事件。
+在主框架页面,关闭全部标签之后,确保当前页面和左侧选中的菜单项一致(木南 - https://t.zsxq.com/Der12)。
	-如果当前显示的页面在左侧菜单项中不存在,则取消左侧选中的菜单项(不改变滚动条的位置)。
+[Core-RazorForms]增强表格的服务端行绑定事件。
	-为GridRowDataBoundEventArgs类新增属性RowSelectable、RowCssClass、RowAttributes。
	-借助于表格的服务端行绑定事件,将原本写在客户端(RowDataBoundFunction="onGrid1RowDataBound")中的业务逻辑移到服务端(OnRowDataBound="Grid1_RowDataBound")。
	-新增示例:表格/行选择/行选择(禁止选择行,整行变灰,服务端行绑定事件/RowSelectable)。
	-新增示例:表格/行与列样式/行样式(服务端行绑定事件/RowCssClass);行样式(服务端行绑定事件/RowAttributes)。
-修正为TabStrip设置不支持的EnableIFrame属性后,页面回发出错的问题(starrynigh - https://t.zsxq.com/VxWzg)。
-为消息框控件新增倒计时进度条(大灰狼 - https://t.zsxq.com/jmSz5)。
#208
v12.2.1 2025-09-03
+表格跨页保持选中行示例增强。
	-[Pro]新增示例:表格/分页/跨页保持选中行/内存分页(行的详细数据,客户端);数据库分页(行的详细数据,客户端)。
	-新增示例:表格/分页/跨页保持选中行/内存分页(直接显示选中行数据);数据库分页(直接显示选中行数据)。
+为面板控件新增RemoveLastFieldsMargin和RemoveFieldsMargin属性(默认表单中的字段都有一个8px的底部外边距)。
	-RemoveLastFieldsMargin用来移除最后一行中表单字段的底部外边距,对应于客户端CSS样式类:f-remove-last-fields-margin。
	-RemoveFieldsMargin来移除所有表单字段的底部外边距,对应于客户端CSS样式类:f-remove-fields-margin。
	+更新示例:布局/Box/HBox(横向表单);
		-为表单设置RemoveFieldsMargin="true"来移除表单字段的底部外边距。
		-使用HBox布局来控制表单字段的位置(Layout="HBox" BoxConfigChildMargin="0 5 0 0" BoxConfigLastChildMargin="0")。
	+更新示例:布局/Box/VBox(表单)。
		-为表单设置RemoveFieldsMargin="true"来移除表单字段的底部外边距。
		-使用VBox布局来控制表单字段的位置(Layout="VBox" BoxConfigChildMargin="0 0 5 0" BoxConfigLastChildMargin="0")。
	+更新示例:表单/表单布局/按钮与表单;基础/登录页面。
		-之前:由于表单最后一行中的字段有底部外边距,所以设置表单的BodyPadding="10 10 0 10"。
		-现在:为表单设置RemoveLastFieldsMargin="true",然后就可以设置表单的BodyPadding="10"。
	+[Pro]更新示例:基础/登录页面(验证码)。
		-更新验证码所在面板的布局属性(Layout="HBox" BoxConfigAlign="End" BoxConfigSpace="5" RemoveFieldsMargin="true")。
		-为验证码设置固定的宽度和高度(Width="100" Height="30"),以便父容器的HBox起作用。
+为VBox和HBox布局新增BoxConfigSpace属性(子项之间的间隔,单位px)。
	-设置BoxConfigSpace属性时,会自动覆盖BoxConfigChildMargin和BoxConfigLastChildMargin属性。
	+对于常见的Form+Grid布局组合(VBox),为表单设置RemoveLastFieldsMargin=true,并使用布局属性为表单和表格之间预留间隔。
		-方法一:为Form控件增加MarginBottom=10。
		-方法二:向父容器增加属性BoxConfigChildMargin="0 0 10 0",并向最后一个子项增加属性Margin="0"。
		-方法三:向父容器增加属性BoxConfigChildMargin="0 0 10 0"和BoxConfigLastChildMargin="0"。
		-方法四:向父容器增加属性BoxConfigSpace="10"。
	-更新示例:布局/内联框架/表格与编辑窗体;下拉框控件/下拉表格/下拉表格(复杂布局);下拉框控件/杂项/始终显示弹出面板。
+删除布局时引入的.f-layout-placeholder节点。
	-替换为:after伪元素,并使用CSS变量(.target-div{--pseudo-height: 40px;})在JavaScript中动态更新伪元素的尺寸。
	-文章:https://fineui.com/docs/#/Dev_in_Progress/13000_deepseek_modify_after_height_using_js
-修正树表格和锁定列同时存在时,展开树节点后序号列数字未更新的问题。
-默认不显示表格最右侧表头的垂直分割线(仅在获取焦点样式时显示)。
-页面水印增强(新增WatermarkOpacity、WatermarkLetterSpacing和WatermarkFontFamily属性)。
-2025年9月3日,北京天安门广场将举行盛大阅兵,隆重纪念中国人民抗日战争胜利80周年。
#207
v12.2.0 2025-08-11
-[Core-RazorForms]修正表格列拖拽排序后重新绑定表格数据出错的问题(薛汉龙Hamny - https://t.zsxq.com/56FDl)。
+[Core-RazorForms]修正DataKeyNames属性在排序后无效的问题(拎壶冲 - https://t.zsxq.com/GkLOe)。
	-DataKeyNames是服务器端属性,会在页面初始化时计算,在页面回发时原样传入后台,不会在客户端被改变。
	-DataKeyNames仅适用于数据展示的表格,不适用于客户端改变行数据或者行顺序的场景,因此不建议在单元格编辑时使用DataKeyNames属性。
	-举例:表格定义了DataKeyNames="Name"属性,初始有3行数据("张萍萍"、"陈飞"、"董婷婷"),客户端删除了"张萍萍"和"陈飞",并在尾部新增1行数据,此时页面上有2行数据。
	-举例[续]:回发页面时,Grid1.DataKeys会保持页面初始化时的数据:[["张萍萍"], ["陈飞"], ["董婷婷"]]。
-修正通过F.ui.Form1.disable()禁用表单时,表单内的下拉列表按钮仍然可以点击的问题(枫山 - https://t.zsxq.com/4SEZf)。
+表格列的Attributes属性增强(糖醋米皮 - https://t.zsxq.com/SqSmy)。
	-表格列的Attributes属性只会应用到表头元素上(也就是th.f-grid-colheader,而不会应用到单元格上td.f-grid-cell)。
	-新增示例:表格/标题栏/标题栏样式(表格列的Attributes属性)。
	+[Pro]表格列的Attributes属性不会影响行的CellAttributes属性(不兼容提醒)。
		-如果需要兼容之前的代码,可以启用ColumnAttributesAffectCellAttributes属性,参考示例:表格/事件/行预绑定事件(Attributes属性)。
		-可以直接在行绑定事件中修改单元格的属性,推荐示例:表格/行与列样式/单元格样式(CellAttributes)。
	-[Core]新增示例:表格/行与列样式/单元格样式(渲染函数,单元格属性)。
+[Core-RazorForms]修正表格列的TextAlign=Center属性对Command标签无效的问题(Sky - https://t.zsxq.com/PwmWi)。
	-新增示例:表格/行命令/行命令(多个图标命令,文本居中显示)。
+不再支持EnableShim(为了防止ActiveX、Flash等对象覆盖弹出的窗体控件)和IEEdge配置项(Sky - https://t.zsxq.com/tDv6m)。
	-因为ActiveX插件通常以窗口化的方式渲染,脱离了浏览器的文档流,导致CSS定位无法正确控制其位置,因此需要一个透明的iframe元素来遮挡这些插件。
	-FineUI已不再支持IE浏览器,因此将EnableShim和IEEdge配置项标记为已废除。
+主题样式增强。
	-降低表单字段焦点时边框阴影的透明度(使得焦点时的边框阴影不那么明显)。
	+新增主题样式类f-body-darkerbg(稍微深色的背景更能突出主体内容)。
		-在官网示例中,为响应式布局目录中的页面添加f-body-darkerbg样式类。
	+新增主题样式类f-panel-border-shadow(面板的边框阴影效果)。
		-在官网示例中,为响应式首页的面板添加f-panel-border-shadow样式类(对应于服务端ShowBorderShadow属性)。
+新增页面水印(Hui🌂 - https://t.zsxq.com/z9ccT)。
	-使用SVG创建水印图形:<text>FineUI</text>,并将其转换为dataURI内联在CSS中:background-image:url("data:image/svg+xml,...");。
	-为PageManager控件新增水印相关属性,比如EnableWatermark、WatermarkText、WatermarkSpaceX、WatermarkSpaceY等。
	-更新官网示例响应式首页,为PageManager增加属性EnableWatermark="true"和WatermarkText="I❤︎FineUI"。
-修正出现横向滚动条时部分合计行看不到的问题(阳光无锈 - https://t.zsxq.com/tCtZw)。
-修正下拉列表的触发图标在锁定列和内联过滤同时存在时层次错位的问题(670220427)。
#206
v12.1.4 2025-07-11
+升级jQueryUI到最新版v1.14.1.
	-老版本存在安全漏洞(125969253,Ahmad Othman)。
	-jQueryUI v1.14.1仅支持最新版本的Chrome、Firefox、Safari和Edge(不支持任何版本的IE和Edge Legacy)。
+[Core-RazorForms]修正定义了DataKeyNames属性的可编辑表格,在客户端新增或者删除行之后回发出错的问题(简 - https://t.zsxq.com/W7O6Z)。
	-表格的DataKeyNames是服务器端属性,会在页面初始化时计算,在页面回发时原样传入后台,不会在客户端被改变。
	-举例:表格定义了DataKeyNames="Name"属性,初始有3行数据("张萍萍"、"陈飞"、"董婷婷"),客户端删除了第1行和第2行,并在尾部新增1行数据,此时页面上显示有2行数据。
	-举例[续]:选中所有行,然后回发页面,在后台观察属性DataKeys仍然是3个元素:[["张萍萍"], ["陈飞"], ["董婷婷"]],因此不建议在单元格编辑时使用DataKeyNames属性。
+兼容表格列的DataField属性存在特殊字符的情况(12543688)。
	-在表头过滤时,列名会作为DOM节点标识符的一部分,因此我们会自动将特殊字符转化为下划线(比如小括号、中括号和空格等)。
+[Pro]开启内容安全策略(Content Security Policy)。
	-为Web.config和PageManager增加全局配置项:CspScripts、CspScriptsAllowNonce和CspScriptsAllowUrls。
	-开启CspScripts后,会自动向页面响应添加script-src标头,并自动为内联脚本标签添加nonce属性。
	-用户自定义的内联脚本或者第三方网站的引用脚本,需自行添加nonce属性:<script nonce="@PageManager.Instance.CspScriptsNonceValue" />
	-增加示例:其他/内容安全策略(CSP)/按钮(CspScriptsAllowNonce);表格(CspScriptsAllowUrls)。
	-文章:https://fineui.com/docs/#/FineUICore_RazorForms/1700_CSP_nonce
+[Pro]增加全局配置项CspScriptsAllowUnsafeInline,适用于第三方库中使用内联脚本的特殊情况(一鸣 - https://t.zsxq.com/2bJyO)。
	-启用CspScriptsAllowUnsafeInline属性时,已经允许所有的内联脚本执行,此时无需启用CspScriptsAllowNonce属性。
	-一般情况下推荐启用CspScriptsAllowNonce属性,这样更加安全。
	-文章:https://fineui.com/docs/#/Questions/5000_CSP_unsafe_inline
#205
v12.1.3 2025-06-15
+新增示例:表格/分页/数据库分页(后台更新分页索引)(木南 - https://t.zsxq.com/Gf3m0)。
	-[JS]为表格增加客户端方法setPageOptions。
	+[Core-MVC]为表格增加PageOptions回发方法,可用来同时更新多个分页选项(RecordCount、PageSize、PageSize)。
		-之前:var grid1=UIHelper.Grid("Grid1");grid1.RecordCount(21);grid1.PageSize(10);grid1.PageIndex(2);
		-现在:var grid1=UIHelper.Grid("Grid1");grid1.PageOptions(recordCount: 21, pageSize: 10, pageIndex: 2);
-[Core]修正未引入多语言服务时,在模型注解中使用RegularExpression/ErrorMessage出错的问题(西门大官人 - https://t.zsxq.com/ylJyk)。
-[JS]在FineUI.js项目中,手工定义表格的pagingbar属性,会由于未进行组件的实例化而出现JS错误的问题。
-[Core]在启用RazorForms的项目中,通过列拖拽改变了列顺序,此时使用UIHelper.Grid的DataSource方法更新表格数据时可能会出现列错位的问题(6976935)。
-[Core-RazorForms]修正表格的RowDataBound事件在页面回发时无效的问题(大灰狼 - https://t.zsxq.com/v0hGM)。
-设置数字输入框的TrimEndZero=false和DecimalPrecision=2,会强制显式两位小数,也就是自动将2或者2.0更新为2.00(余魁 - https://t.zsxq.com/WEHVn)。
#204
v12.1.2 2025-05-15
-修正FormRow的布局问题(一鸣 - https://t.zsxq.com/QYjHl)。
-[Core-RazorForms]修正按钮未设置ID时无法触发后台点击事件的问题。
-[Core-RazorForms]修正在回发事件中无法修改面板的IFrameUrl属性的问题(郑建泳,西门大官人 - https://t.zsxq.com/u2v8E)。
-[Core]在将项目部署为网站的子目录(转换子应用程序)时,无需设置BaseUrl配置项。
	-文章:https://fineui.com/docs/#/Questions/10800_iis_subapp
-在线示例项目的主框架,如果左边菜单有链接和固定选项卡一样,那么点击此菜单时不应该改变固定选项卡的可关闭状态(一鸣 - https://t.zsxq.com/wO8Aa)。
#203
v12.1.0 2025-05-08
+[Core]在表格列中显示枚举值的Display注解,新增示例:其他/数据模型/表格控件(枚举值)(19999827)。
	-文章:https://fineui.com/docs/#/Dev_in_Progress/8000_grid_enum_display
+为选项卡右键菜单新增图标字体(一鸣 - https://t.zsxq.com/OKA9b)。
	-新增示例:导航/选项卡控件/杂项/选项卡右键菜单(图标字体,JavaScript方式);(图标字体,CSS方式)。
	-文章:https://fineui.com/docs/#/Questions/10100_closemenu_iconfont
+[Pro]重构窗体控件CloseAction属性的内部实现方式(和Core版保持一致)。
	-设置窗体的CloseAction=HidePostBack,则点击窗体右上角的关闭按钮时,先隐藏窗体后触发关闭事件(回发页面并执行Window1_Close后台事件处理函数)。
	-执行Window1|ActiveWindow.GetHidePostBackReference()返回的脚本时,同样会触发窗体的关闭事件(回发页面并执行Window1_Close后台事件处理函数)。
	-测试示例:表格/扩展列/弹出窗体列;表格/导出与下载/导出文件(选择需要导出的列);表格/单元格编辑/快速选择/从弹出窗体中快速选择。
	-测试示例:导航/窗体控件/窗体;布局/内联框架/表格与编辑窗体(提示对话框);(提示对话框,自定义脚本);子窗口中选择省份(GetHidePostBackReference)。
+[JS]为选项卡新增removeOnClose属性(一鸣 - https://t.zsxq.com/nz73W)。
	+removeOnClose表示关闭时移除当前选项卡实例(默认为false,关闭时隐藏)。
		-被移除的选项卡不能再次通过showTab或者activeTab来激活,只能通过addTab再次创建,一般用于启用内联框架(iframe)的选项卡,请谨慎使用。
	+为选项卡(F.Tab)新增close()方法,为选项卡面板(F.TabStrip)新增closeTab()、closeAllTabs()和closeOtherTabs(exceptedTab)方法。
		-关闭时会根据选项卡的removeOnClose属性决定是否移除选项卡实例。
	+[重构提醒]建议将项目中的所有F.ui.TabStrip1.removeTab('tab1')改为F.ui.TabStrip1.closeTab('tab1')。
		-removeTab会直接移除选项卡实例,不会触发close事件(不建议使用此方法)。
		-closeTab会先触发close事件,然后根据选项卡的removeOnClose属性决定是否移除选项卡实例。
	+默认情况下,官网示例首页的选项卡关闭后会隐藏(而不是移除)。
		-F.initTreeTabStrip的参数moveToEnd表示将新增选项卡移到尾部(否则会显示在上一次关闭前的位置)。
		-可以在beforeTabAdd回调中,通过tabOptions修改选项卡的初始属性tabOptions.removeOnClose=true,以便在关闭时移除选项卡实例(而不是隐藏)。
	-文章:https://fineui.com/docs/#/Questions/10200_tab_removeonclose
+为选项卡控件(Tab)新增RemoveOnClose属性(关闭时移除当前选项卡实例)。
	-新增选项卡配置参数类TabOptions,为TabStrip新增GetAddTabReference(TabOptions tabOptions)方法。
	-为TabStrip新增GetCloseTabReference(string tabID)方法,为Tab新增GetCloseReference()方法。
	-新增示例:导航/选项卡控件/启用IFrame/IFrame选项卡(动态创建、关闭时移除选项卡实例)。
+[Pro]增强表单控件的项绑定事件(ItemDataBound)(19999827)。
	+为CheckBoxList/RadioButtonList新增ItemDataBound事件,为CheckItem/RadioItem新增Attributes属性。
		-新增示例:表单/选择框/复选框列表(列表项绑定事件,提示信息)。
		-新增示例:表单/选择框/单选框列表(列表项绑定事件,提示信息)。
	+为下拉列表的项ListItem新增Attributes属性。
		-新增示例:表单/下拉列表控件/自定义列表项/自定义列表项(列表项绑定事件,提示信息)。
+[Core-RazorForms]为表单控件新增项绑定事件(ItemDataBound,仅RazorForms开发模式适用)。
	+为CheckBoxList/RadioButtonList新增ItemDataBound事件,为CheckItem/RadioItem新增Attributes属性。
		-新增示例:表单/选择框/复选框列表(列表项绑定事件,提示信息)。
		-新增示例:表单/选择框/单选框列表(列表项绑定事件,提示信息)。
	+为DropDownList新增ItemDataBound事件,为ListItem新增Attributes属性。
		-新增示例:表单/下拉列表控件/自定义列表项/自定义列表项(列表项绑定事件);(列表项绑定事件,提示信息)。
	+本特性不适用于FineUICore(MVC和RazorPages开发模式)。
		-这两种开发模式的数据流转:首先在PageModel/Controller中准备数据,然后通过ViewData传入页面视图,最后在页面视图中进行数据绑定。
		-这种声明式的编程风格,和RazorForms的事件驱动编程风格不同,因此这次新增的项绑定事件不适合在MVC和RazorPages开发模式中使用。
		-在MVC和RazorPages中实现相同的效果:在页面视图中获取控件实例(F.GetControl<CheckBoxList>),然后遍历控件的Items集合,设置每一个项的Attributes属性。
		-对应的MVC和RazorPages示例:表单/选择框/复选框列表(提示信息);单选框列表(提示信息);表单/下拉列表控件/自定义列表项/自定义列表项;(提示信息)。
	-文章:https://fineui.com/docs/#/Questions/10300_dataitembound_tooltip
-新增示例:表格/事件/行单击回发事件(阻止列的行点击事件)(子龙 - https://t.zsxq.com/b8mgQ)。
+清空表格复选框列的单元格值,则前台显示为空白单元格(STARK11号 - https://t.zsxq.com/cFKY5)。
	-[Pro]在后台行绑定事件(RowDataBound)中清空单元格的值,新增示例:表格/事件/行绑定事件(空白单元格)。
	-[Core]在前台行绑定事件(RowDataBoundFunction)中清空单元格的值,新增示例:表格/行与列样式/客户端行绑定函数(空白单元格)。
+[Pro]为表格事件参数类GridRowEventArgs新增方法(简化表格RowDataBound事件中的代码)。
	-新增方法GetCellValue/SetCellValue,GetCellCssClass/SetCellCssClass,GetCellAttribute/SetCellAttribute
	-之前:RenderField rfEntranceYear=Grid1.FindColumn("EntranceYear") as RenderField;e.CellCssClasses[rfEntranceYear.ColumnIndex] = "color1";
	-现在:e.SetCellCssClass("EntranceYear", "color1");
	-更新示例:表格/事件/行绑定事件;(空白单元格);表格/树表格/杂项/树表格(复选框列)。
	-更新示例:表格/单元格编辑/杂项/动态创建可编辑列;表格/单元格编辑/禁止编辑/禁止行编辑;禁止单元格编辑;禁止单元格编辑(结束编辑)。
	-更新示例:表格/行选择/行选择(禁止选择行,整行变灰);表格/行与列样式/单元格样式(CellAttributes);(CellCssClasses)。
+[Core-RazorForms]为表格新增行绑定事件(RowDataBound,仅RazorForms开发模式适用)。
	-新增GridRowDataBoundEventArgs事件参数类和GetFieldValue/SetFieldValue方法(注意和Pro版中GetCellValue/SetCellValue方法的区别)。
	-Pro版:可以在行绑定事件中修改单元格的值(SetCellValue)、样式(SetCellCssClass)和属性(SetCellAttribute)。
	-Core版:服务器端行绑定事件中无法修改单元格的值、样式和属性(此时尚未创建单元格),只能设置数据字段的值(SetFieldValue)。
	-Core版:可以在客户端的行绑定函数中修改单元格的值、样式和属性,参考示例:表格/事件/客户端行绑定函数(行样式)。
	-[Core-RazorForms]新增示例:表格/事件/服务端行绑定事件。
	-文章:https://fineui.com/docs/#/Questions/10400_rowitembound_emptycell
+[Core-RazorForms]为f:Command标签新增RendererFunction属性(自定义行命令渲染器函数)(https://t.zsxq.com/6fGNu,kalman - https://t.zsxq.com/E1H7Y,hs - https://t.zsxq.com/vPDo0)。
	-新增示例:表格/行命令/行命令(渲染函数,禁用某个行命令);(渲染函数,隐藏某个行命令)。
+重构日期控件(Calendar和DatePicker)。
	-通过左右箭头图标切换年份或者月份时不改变当前选中的日期。
	-在日期选择面板中(CalendarDisplayType.Day),通过点击切换年份或者月份时不改变当前选中的日期。
	+允许选择时间(ShowTime=true)时,点击日期或者时分秒都会触发选择事件,验证示例:表单/输入框/日期选择框/日期选择框(选择时间)。
		-新增属性:ShowConfirmButton,是否显示确定按钮(默认为true,仅在showTime=true时有效)。
		-新增属性:ConfirmToSelect,点击确定按钮才会触发选择事件(默认为false,仅在showTime=true时有效)。
		-新增示例:表单/输入框/日期选择框/日期选择框(选择时间,显示确定按钮)。
	+只显示年份或者只显示月份时,可以通过MinDate和MaxDate属性限制选择的范围(箫涩灬志 - https://t.zsxq.com/POSDW)。
		-新增示例:表单/输入框/日期选择框/日期选择框(只显示年份,限制范围);(只显示年月,限制范围)。
+增强行分组合计渲染函数的参数列表(RowGroupSummaryRendererFunction)(火华 - https://t.zsxq.com/G1br2)。
	-参数列表和合计渲染函数SummaryRendererFunction的参数列表一致,分别为(summaryRowIndex,cellValue,params);参考示例:表格/合计行/合计行(当前页合计,单元格样式)。
	-其中:params.rowData表示当前合计行数据,params.rowGroupData表示对应的行分组数据,params.rowGroupData.children.length表示当前分组内有多少行(包含合计行)。
	-新增示例:表格/行分组/分组合计/行分组(分组合计,单元格样式);更新示例:表格/行分组/分组合计/行分组(分组合计,多行合计)。
#202
v12.0.5 2025-04-28
-修正表格延迟渲染失效的问题(曹** - https://t.zsxq.com/xHGol)。
-修正在大数据表格和延迟渲染表格中,点击标题栏的全选框时工具栏显示的选中行数不正确的问题(想管狗的羊 - https://t.zsxq.com/2TDPA)。
-优化表格布局(显示选中行信息时避免重复布局)。
-在示例项目的主框架页面中,如果初始固定选项卡的网址和左侧某个树节点的网址相同,则页面初始化时会重复添加一个选项卡(一鸣 - https://t.zsxq.com/5oA2t)。
-修正锁定表格中更新合计行时可能出现脚本错误的问题(6976935)。
-修正行扩展列表格中上下按键无法更改选中行的问题(herry)。
-修正数字输入框中Suffix和Text冲突的问题(hs - https://t.zsxq.com/XDibn)。
+[Core]页面回发时,确保UIHelper.Form("Form1").Reset()和PageContext.RegisterStartupScript()生成的脚本按照注册顺序执行(imyoung - https://t.zsxq.com/SsDwB)。
	-在Core的RazorForms开发模式下,属性改变的相关脚本会先于PageContext.RegisterStartupScript()的脚本执行(和之前的逻辑保持一致)。
-在AppBoxCore中,通过F.beforeAjaxError函数拦截未认证身份的AJAX请求(401 Unauthorized,比如页面停留时间过长导致的Cookie过期)(earthpea - https://t.zsxq.com/CSHpi)。
#201
v12.0.3 2025-03-31
-表格禁用标题栏菜单时点击标题文本可以触发排序事件(34484135)。
-单元格编辑中回车导航社区版可用(imyoung - https://t.zsxq.com/xsuIf)。
-[Pro]如果在表格的RowDataBound事件中清空了复选框列的值,则前台显示为空白单元格(STARK11号 - https://t.zsxq.com/cFKY5)。
-修正输入框在未获得焦点时也可以响应鼠标滚轮事件的问题(@ - https://t.zsxq.com/bJyMq)。
+修正表格的客户端合计有时会出现多位小数的问题(imyoung - https://t.zsxq.com/muLMc)。
	-比如14个2.69之和等于37.660000000000004,测试代码:var a=0; for(var i=0;i<14;i++) {a+=2.69;} console.log(a);
	-当客户端合计结果为小数时会自动保留两位小数(a.toFixed(2))。
-修正通过ActiveWindow.GetWriteBackValueReference()函数更新表单字段之后未触发验证的问题(419061050 - https://t.zsxq.com/aYYTb)。
-今天是壮族三月三(汉族的上巳节),家家户户都会蒸制五色糯米饭(用红蓝草、黄姜、紫蓝草、枫叶染成红黄紫黑白五种颜色),香甜美味。
#200
v12.0.2 2025-03-20
-企业版服务器部署时确保PageManager.GetRequestIPMAC()函数返回的MAC地址不为空(4415852)。
-修正表格未启用分页但是设置了ShowPagingMessage=false属性导致的错误(6976935)。
-修正紧凑模式下的表格进入单元格编辑状态时的样式问题(输入框的高度计算不正确)。
-[Pro]修正RadioButtonList的Required属性后台无法更新的问题(子龙 - https://t.zsxq.com/fYYjS)。
+[Core-RazorForms]修正数据库分页(跨页保持选中行)中无法保持选中行的问题(19999827)。
	-为表格新增ClearSelectionBeforeBinding属性,用于在数据绑定前清空选中项(服务端调用DataBind方法时,默认为true),和FineUIPro保持一致。
	-更新示例(增加ClearSelectionBeforeBinding=false):表格/分页/数据库分页(跨页保持选中行);(跨页保持选中行,行的详细数据)。
-修正表格内联过滤和锁定列共存的滚动问题(Hamny - https://t.zsxq.com/zvoZY)。
-修正表格内联过滤的输入框中无法使用左右方向键控制光标位置的问题(34484135)。
-修正全局设置GridPagingType=ArrowNumberBox不生效的问题(玄虹 - https://t.zsxq.com/HqhE5)。
-修正表格启用单元格选中样式时,无法点击单元格中的超链接文本的问题(34484135)。
-修正表格启用单元格选中样式禁用行选中样式时,锁定列的样式问题(34484135,一鸣 - https://t.zsxq.com/Not3n)。
#199
v12.0.0 2025-03-14
+表格单元格节点.f-grid-cell-inner内部新增.f-grid-cell-text节点,可能会影响部分示例。
	-检查项目源代码,可能需要将自定义选择器 .f-grid-row .f-grid-cell-inner 改为 .f-grid-row .f-grid-cell-text(不兼容提醒)。
	-更新示例:表格/列锁定/列锁定(自动换行);表格/杂项/自动换行。
	-新增示例:表格/列锁定/列锁定(自动换行,多行文本省略);表格/杂项/自动换行(多行文本省略)。
	-新增示例:表格/标题栏/标题栏自动换行(多行文本省略)。
+树控件重构。
	-使用CSS3的display:flex布局对树节点.f-tree-cell-inner进行重构。
	-内部实现:“折叠图标移到右侧”功能,无需使用复杂的absolute定位,flex布局的order属性可以方便的修改子元素的显示位置。
	-内部实现:“隐藏横向滚动条时”功能,无需为每一个.f-tree-cell-text元素显式的设置宽度,只需要设置.f-tree-cell-inner的宽度即可。
	-支持节点文字的自动换行功能,新增示例:导航/树控件/杂项/自动换行;(多行文本省略)。
+新增表格行密度控制。
	-为表格增加属性:RowDensity(行密度),支持四种不同的行密度:Default(默认)、Small(紧凑)、Large(大间距)、XLarge(超大间距)。
	-行密度(RowDensity)可以和固定行高(FixedRowHeight)同时使用。
	-新增示例:表格/行密度和行高度/行密度;(自动换行);(自动换行,多行文本省略)。
+表格固定行高重构。
	-大间距模式下单元格的内边距由9px调整为10px,大字体模式下单元格的内边距由9px调整为12px。
	+表格的行高定义不包含单元格的内边距(不兼容提醒)。
		-之前版本的行高(RowHeight属性)是包含内边距的。
		-新版本的行高不包含内边距,因此在同一个显示模式下,不管表格的行密度如何,行高都是一样的。
		-不同显示模式下的行高:紧凑模式(16px)、小字体模式(16px)、普通模式(20px)、大间距模式(24px)、大字体模式(24px)。
	+使用固定行高时(FixedRowHeight=true):
		-如果未设置RowHeight,则使用默认行高(不包含单元格的内边距)。
		-新增属性RowHeightLines(默认行高的整数倍,比如:数字3表示将行高设为默认行高的3倍,也就是3行文字的高度)。
		-使用 RowHeightLines 属性可以快速设置所有显示模式下的行高(容纳几行文字)。
		+手工设置行高时:
			-尽量将行高设置为默认行高的整数倍,防止文字换行时被部分遮挡的问题。
			-需要为所有显示模式设置行高(RowHeight、RowHeightCompact、RowHeightSmall、RowHeightLargeSpace、RowHeightLarge)。
			-推荐使用 RowHeightLines 属性快速为所有显示模式设置行高。
	-新增示例:表格/行密度和行高度/行高固定;(一键设置行高,自动换行);(一键设置行高,自动换行,多行文本省略)。
	-新增示例:表格/行密度和行高度/行高固定(行密度,自动换行,多行文本省略)。
+表格列锁定重构(支持右侧锁定列)。
	-使用CSS3的position:sticky属性对列锁定进行重构(不支持IE11浏览器)。
	-去除.f-grid-inner下层节点.f-grid-inner-main。
	+由于只存在一个主表格,因此无需在布局时进行表格之间的行高同步和滚动条同步,所以锁定表格的性能有很大的提升。
		-客户端API函数getRowEl和getRowEls去除参数includeLockedTable(现在只有一个主表格了)。
	-简化多表头锁定列的逻辑:当分组表头的某一列变成锁定列时,则该分组表头中的其他列都会自动变成锁定列。
	-行扩展列的显示位置和未启用列锁定时一样(不会像上个版本只展示在非锁定列区域)。
	-新增表格属性ColumnLockingRight,启用右侧锁定。
	-新增示例:表格/列锁定/列锁定(保存列锁定状态和列顺序);(列拖拽排序)。
	-新增示例:表格/列锁定/右侧锁定/右侧锁定;(行扩展列);(多表头);(合计行);(列拖拽排序)。
	-为列锁定客户端函数增加lockedPosition参数,函数原型定义:function lockColumn(columnId,lockedPosition)。
+表格的表头图标重构。
	-使用CSS3的display:flex布局对表格标题栏.f-grid-colheader-inner进行重构,可能会影响部分示例。
	-简化表头图标的交互效果,当菜单打开时,表头图标没有了高亮效果。
	-删除表头的设置图标,点击标题栏文本即可弹出表头菜单(更加简约时尚)。
	+表头过滤图标重构。
		-过滤图标紧挨着标题文本,当标题文本过长时显示省略号。
		-表头菜单中点击“过滤”菜单项,不再弹出子菜单了,而是直接在当前表头下方弹出过滤菜单。
		+过滤图标可以直接点击,以弹出过滤菜单,因此无需单独的过滤菜单配置项。
			-删除表格属性SeparateFilterMenu,删除示例:表格/表头过滤/过滤(单独的过滤菜单)。
+列拖拽排序重构。
	-列拖拽排序时,如果改变了列的锁定状态,则先触发客户端的columnlock或者columnunlock事件,然后再触发客户端的columnmove事件。
	-更新示例:表格/行与列排序/表格列配置,使用集合初始化语法创建JArray对象(表格列的默认配置数据)。
+表格行扩展列重构。
	-之前:行扩展数据和当前行放在一个table结构中,因此点击行扩展数据时会选中当前行。
	-现在:将行扩展数据单独出来,并且行扩展数据不响应鼠标焦点事件和点击事件。
	+更新示例:表格/扩展列/行扩展列(嵌套表格,网址数据源);(嵌套HTML表格)(不兼容提醒)。
		-之前:查找某一行的行扩展数据节点,使用 rowEl.find('.f-grid-rowexpander-details .f-grid-tpl')
		-现在:查找某一行的行扩展数据节点,使用 rowEl.next().find('.f-grid-tpl')
+为Grid、PageManager和Web.config增加全局配置项。
	-始终显示表格标题栏图标:GridHeaderSortIconVisible(默认true)和GridHeaderFilterIconVisible(默认true)。
	-始终显示表格分页工具栏:GridPagingToolbarVisible(未启用分页时显示总记录数和选中的行数,默认true)。
	-表格分页工具栏的显示类型:GridPagingType(默认PagingType.ArrowNumberBox)。
	-表格分页控制按钮位于工具栏的右侧:GridPagerAlignRight(默认true)。
	-GridShowSelectionMessage(显示选中行信息,默认true),GridShowPagingMessage(显示分页信息,默认true)。
	-启用表格中的文字选择:GridTextSelection(默认false)。
	+表格列的默认最小宽度 GridMinColumnWidth(默认36px)和默认宽度 GridColumnWidth(默认120px)。
		-表格列的默认最小宽度由20px调整为36px,默认宽度由100px调整为120px(已设置Width属性的列不受影响)。
		-更新官网示例,去除所有表格列的Width="100px"属性,以便使用列的默认宽度。
	-官网在线示例项目中,在Web.config中开启GridTextSelection属性。
+为表格增加如下属性,这些属性会覆盖PageManager和Web.config中的相应属性。
	-HeaderSortIconVisible、HeaderFilterIconVisible、PagingToolbarVisible、PagerAlignRight、ShowSelectionMessage等。
+为表格新增SelectionMessageRendererFunction属性。
	-新增示例:表格/杂项/自定义选中行消息渲染函数。
+确保表格的客户端dataload事件触发时,页面已经加载完毕(此时可以获取页面上的所有控件实例)。
	-更新示例:表格/杂项/自定义表头过滤菜单。
+修正全局配置项CustomScrollbar=false无法启用默认滚动条样式的问题。
	-CustomScrollbar默认值是false,如果想启用窄版滚动条(仅桌面浏览器有效),需要显式设置CustomScrollbar=true。
-表格表头列分割线的高度减少(上下不到头),从而减少视觉干扰。
-官网在线示例中,当用户选中仅显示社区版示例复选框时,按钮右上角显示文本徽标“仅社区版”。
+增强表格的DataAttributeFields属性(客户端渲染时使用服务端数据,可以替代服务端渲染的模板列)。
	+设置表格属性DataAttributeFields="Name,Avatar,EntranceYear",可以将多个数据字段输出到客户端。
		-在列渲染函数(列的RendererFunction属性)中,可以方便的通过params.rowData.attrs['Avatar']获取数据。
		-在行渲染函数(表格的RowRendererFunction或者CardRendererFunction属性)中,可以方便的通过params.rowData.attrs['Avatar']获取数据。
	+更新响应式首页的表格实例。
		-新增基本信息列,包含学生的姓名、头像、性别、入学年份等信息。
		-新增评分列;新增状态列(优秀、良好、补考和重修)。
	-新增示例:表格/卡片模式/卡片模式(个人头像);表格/卡片模式/显式模式/卡片模式(显示模式切换,个人头像)。
+修正单元格编辑时Tab/Enter的焦点问题(670220427)。
	-正常情况:表格启用单元格编辑时,按Tab键或者Enter键跳转到下一个单元格,并且使此单元格进入编辑焦点状态。
	-异常情况:如果此单元格不可见,则会改变滚动条的位置让此单元格可见,但是单元格的编辑状态丢失了。
	-验证示例:表格/单元格编辑/键盘导航/单元格编辑(Enter纵向导航,自动滚动)。
+增强合计行的渲染函数(SummaryRendererFunction)(卅千岁 - https://t.zsxq.com/Efxxl)。
	+增强客户端合计行的数据格式(服务器端SummaryData属性不受影响)。
		-之前:[{"Fee":"79833.00","Donate":"7878.00"}]
		-现在:[{"index":0,"values":{"Fee":"79833.00","ExtraFee":"7878.00","ExtraFee.cls":"color1"}}]
	-新增示例:表格/合计行/合计行(当前页合计,单元格样式)。
+父页面的mousedown事件会传递到iframe子页面(670220427)。
	-验证示例:表单/按钮控件/菜单按钮,先点击按钮展开菜单,然后点击父页面的空白处,iframe页面内按钮的菜单消失。
-RadioButtonList的Required属性可以后台更新(子龙 - https://t.zsxq.com/i9W2i)。
+修正HBox布局的一个潜在问题(owen.huang)。
	-问题描述:HBox容器高度不固定(AutoScroll=true),反复缩小容器的宽度,会导致HBox容器的高度逐渐增大。
	-验证示例:布局/Box/HBox(横向滚动条,自动高度)。
+修正HBox和VBox布局默认出现滚动条的问题。
	-验证示例:布局/Box/HBox(横向滚动条),缩小页面宽度并刷新页面,此时容器只应该出现横向滚动条(不应该出现纵向滚动条)。
	-验证示例:布局/Box/VBox(纵向滚动条),缩小页面高度并刷新页面,此时容器只应该出现纵向滚动条(不应该出现横向滚动条)。
+[Pro]更新示例:表格/单元格编辑/禁止列编辑/禁止列编辑(Present - https://t.zsxq.com/XeGAt)。
	-由于将EnableColumnEdit属性的类型由bool改为bool?,在逻辑判断时要注意空值(null)的影响。
	-之前:column.EnableColumnEdit = !column.EnableColumnEdit;
	-现在:column.EnableColumnEdit = !(column.EnableColumnEdit ?? true);,使用空合并运算符(??)返回变量为空时的默认值。
	-最后:经过内部代码优化,可以确保回发时EnableColumnEdit不为空,所以之前的代码依然有效,无需更改!
+[Core-RazorForms]回发时更新EnableColumnEdit属性,新增示例:表格/单元格编辑/禁止列编辑/禁止列编辑(后台更新)。
+优化表格在大数据模式下的行数提示(EnableBigDataRowTip)。
	-将行数提示元素(.f-grid-bigdata-qtip)从.f-grid-bodyct移到.f-grid-inner下面,滚动条滚动时,不会出现提示元素上下抖动的问题。
	-新增属性BigDataRowTipPosition,可以将行数提示显式在分页工具栏中,新增示例:大数据(网址数据源,1000,行数提示的位置)。
+增强社区版功能。
	+全局错误拦截社区版可用。
		-自行拦截服务器错误社区版可用,示例:其他/服务器错误(自行拦截)。
		-新增示例:其他/AJAX请求超时错误(自行拦截)。
	+表格的键盘导航社区版可用。
		-未启用单元格编辑时,支持Tab按键的纵向和横向导航(不支持Enter导航)。
		-新增示例:表格/快捷导航/键盘导航(Tab纵向导航)。
	+单元格编辑下的键盘导航社区版可用。
		-支持Enter和Tab键的纵向和横向导航;支持Tab键只是可编辑单元格之间导航。
		-示例:表格/单元格编辑/键盘导航/单元格编辑(Tab纵向导航)等8个示例
	+表格快速分页社区版可用。
		-上下按键和鼠标滚轮快速切换分页,分页后自动选中第一项或者最后一项。
		-示例:表格/快捷导航/内存分页(快速切换分页);数据库分页(快速切换分页)。
	+表格分页类型社区版可用。
		-支持箭头、数字输入框和数字按钮的5种不同组合(Arrow、NumberBox、ArrowNumberBox、NumberButton、ArrowNumberButton)。
		-示例:表格/分页/分页类型。
-FineUIPro在线示例数突破1000个(https://pro.fineui.com/)。
-版本更新图文简介:https://fineui.com/docs/#/Dev_in_Progress/6000_fineui_v12
-从v12.0版本开始,仅支持最新版本的Chrome、Firefox、Safari和Edge(不支持任何版本的IE和Edge Legacy)。
#198
v11.9.2 2025-03-07
+[Core]增加全局配置项CspScriptsAllowUnsafeInline,适用于第三方库中使用内联脚本的特殊情况(一鸣 - https://t.zsxq.com/2bJyO)。
	-启用CspScriptsAllowUnsafeInline属性时,已经允许所有的内联脚本执行,此时无需启用CspScriptsAllowNonce属性。
	-一般情况下推荐启用CspScriptsAllowNonce属性,这样更加安全。
	-文章:https://fineui.com/docs/#/Questions/5000_CSP_unsafe_inline
+[Core]新增全局配置项GridConvertLongToString(默认为true)(251081362,stone磊 - https://t.zsxq.com/oEiD1,XINGHE - https://t.zsxq.com/Ld33Y)。
	+这是一个老生常谈的问题,由于JavaScript的语言限制,无法处理高精度整数(最多16位整数)。
		-测试:先将21956392701267968赋值给一个JS变量,然后读取,其数值变为21956392701267970。
	-启用GridConvertLongToString之后,Int64和BigInteger类型的数据都会转化为字符串,不用再担心客户端数字精度丢失的问题(对于数据主键为BIGINT的情况非常有用)。
	-文章:https://fineui.com/docs/#/Dev_in_Progress/7000_js_precision_long
+[Core]标签定义中同时存在ID和For属性时,不管定义顺序如何,优先使用ID属性(一鸣 - https://t.zsxq.com/Fw34d)。
	-如果只存在For属性,比如<f:TextBox For="CurrentUser.UserName"/>,则客户端通过F.ui.CurrentUser_UserName获取此控件实例。
	+如果同时定义ID和For属性,如下两种定义是等价的,则客户端通过F.ui.Name1获取此控件实例;页面回发时,后台通过Request.Form["CurrentUser.UserName"]获取此控件的值。
		-定义一:<f:TextBox ID="Name1" For="CurrentUser.UserName"/>
		-定义二:<f:TextBox For="CurrentUser.UserName" ID="Name1"/>
#197
v11.9.1 2025-02-21
-[Core]修正启用CSP安全策略时未处理HtmlEditor内联脚本的问题(谭晓 - https://t.zsxq.com/iPnjp)。
-修正单元格编辑TAB跳转时,处于滚动条之外的单元格无法获取焦点的问题(670220427,583883733)。
-[Core-RazorForms]修正回发时动态创建隐藏列时出现的问题(583883733)。
-修正数字输入框的TrimEndZero不起作用的问题(木南 - https://t.zsxq.com/NBoX4)。
#196
v11.9.0 2025-02-18
+[Core]允许用户自行引入前端JavaScript库和CSS库(Ken - https://t.zsxq.com/PDj09)。
	-提供公开方法获取静态资源的引用地址(ResourceHelper.GetStaticResourceUrl)。
	+自动引入FineUICore相关脚本:@F.RenderScript(),对比手工引入:
		-<script type="text/javascript" src="@ResourceHelper.GetStaticResourceUrl(StaticResourceType.JavaScriptLibrary)" />
		-<script type="text/javascript" src="@ResourceHelper.GetStaticResourceUrl(StaticResourceType.JavaScriptLanguage)" />
		-@F.RenderScript().IncludeStaticResources(false)
	+自动引入FineUICore相关样式:@F.RenderCss(),对比手工引入:
		-<link type="text/css" rel="stylesheet" href="@ResourceHelper.GetStaticResourceUrl(StaticResourceType.CssLibrary)" />
		-<link type="text/css" rel="stylesheet" href="@ResourceHelper.GetStaticResourceUrl(StaticResourceType.CssTheme)" />
		-@F.RenderCss().IncludeStaticResources(false)
	+用户自行引入script和style标签后,可以满足项目的多变需求:
		-比如自行应用安全策略(为script标签添加nonce属性)。
		-或者将内置资源文件剥离出来部署到外部域名,开启静态资源的CDN加速。
+[Core]开启内容安全策略(Content Security Policy)。
	-为Web.config和PageManager增加配置项:CspScripts、CspScriptsAllowNonce和CspScriptsAllowUrls。
	-开启CspScripts后,会自动向页面响应添加script-src标头,并自动为内联脚本标签添加nonce属性。
	-用户自定义的内联脚本或者第三方网站的引用脚本,需自行添加nonce属性:<script nonce="@PageManager.Instance.CspScriptsNonceValue">
	-增加示例:其他/内容安全策略(CSP)/按钮(CspScriptsAllowNonce);表格(CspScriptsAllowUrls)。
	-文章:https://fineui.com/docs/#/FineUICore_RazorForms/1700_CSP_nonce
-新增示例:表单/选择框/单选框(自定义文本样式)(子龙 - https://t.zsxq.com/8DzIU)。
+修正数字输入框的TextChanged事件在页面回发时可能会被触发的问题(348382529)。
	-重现:初始设置数字输入框的Text="50.525",第一次点击按钮回发时,会先触发输入框的TextChanged事件,然后再触发按钮的Click事件。
	-修正:通过在后台代码中对用户设置的值进行规整化("50.525"=>"50.53"),从而避免了第一次回发时触发数字输入框的TextChanged事件。
+修正主框架切换选项卡时可能出现错误的问题(34484135)。
	-重现:先点击左侧树节点打开几个选项卡,然后清空左侧树,此时切换选项卡会出现错误。
	-修正:切换选项卡时,首先检查对应的左侧树节点是否存在。
-修正表格内联过滤的下拉列表过滤字段无法在后台更新数据源的问题(34484135)。
+修正后台获取下拉列表的SelectedItem不存在的问题(黄永鉴 - https://t.zsxq.com/3w2S5)。
	-下拉列表的AutoSelectFirstItem属性默认为true,所以后台获取SelectedItem时会自动获取Items的第一项。
-修正在父页面弹出的Window控件无法触发iframeload事件的问题(腊八 - https://t.zsxq.com/LXhVr)。
-修正手风琴子面板过多时不显示的问题(此时显示纵向滚动条)(STARK11号 - https://t.zsxq.com/2cE6r)。
#195
v11.8.0 2024-12-24
+[Core]多语言支持。
	+多语言资源位于Resources目录中,分为两种类型。
		-共享资源:比如数据注解资源(SharedAnnotationResources.resx)和客户端JavaScript资源(SharedJavaScriptResources.resx)。
		-页面资源:目录结构和页面模型类相对应,比如Pages/MultiLang/LoginAnnotationModel.resx对应于LoginAnnotationModel.cshtml.cs页面模型类。
	+支持数据注解的多语言资源(SharedAnnotationResources)。
		-在Startup/ConfigureServices方法中,调用AddDataAnnotationsLocalization来注册数据注解的多语言服务(SharedAnnotationResources)。
	+页面模型的多语言资源,直接调用基类(BaseModel.cs)定义的GetResource实例方法(简化的方法名为:_R)。
		-通过FineUICore.PageContext.GetLocalizer(this.GetType())获取当前页面模型对应的多语言资源处理器。
	+页面视图的多语言资源,同样调用模型的实例方法Model.GetResource(简化的代理方法名同样为:_R)。
		-定义全局代理类型:delegate TResult ParamsFunc<T1, T2, TResult>(T1 arg1, params T2[] arg2)
		-页面视图中定义代理方法名:ParamsFunc<string, object, string> _R => Model.GetResource;
	+客户端JavaScript中的多语言资源,直接调用F.getResource方法(可以简化为:window._R = F.getResource)。
		-在JavaScript中初始化资源:F.setResources({"Male": "男", "Female": "女"});
		-定义类SharedJavaScriptResources和共享资源文件Resources/SharedJavaScriptResources.resx。
		-页面上注册多语言资源:@Html.Raw(FineUICore.PageContext.GetJavaScriptResourcesReference<SharedJavaScriptResources>())
	+设置当前语言,我们自定义了请求语言提供器(RequestCultureProvider)。
		-ASP.NET Core默认用于保存多语言设置的Cookie格式为:.AspNetCore.Culture=c=zh-CN|uic=zh-CN
		-为了重用之前的Cookie(Language),不引入新的Cookie(.AspNetCore.Culture),我们引入了自定义请求语言提供器(MyCustomRequestCultureProvider)。
		-之前定义的Cookie格式为:Language=zh_CN/en/zh_TW,我们需要在提供器中进行简单的转换(zh_CN->zh-CN, en->en-US, zh_TW->zh-TW)。
		-在Startup/ConfigureServices方法中,添加此自定义语言提供器(MyCustomRequestCultureProvider)。
	-新增示例:其他/多语言/登录页面;登录页面(数据注解);表单验证(数据注解,扩展特性UICompare)。
	-新增示例:其他/多语言/表格;表格(数据注解);树控件(复选框)。
	-文章:https://fineui.com/docs/#/FineUICore_RazorForms/1600_multilang
+[Pro]多语言支持。
	+多语言资源位于根目录的App_GlobalResources目录和页面所在子目录的App_LocalResources目录。
		-共享资源:比如全局共享资源(SharedResources.resx)和客户端JavaScript资源(SharedJavaScriptResources.resx)。
		-页面资源:目录结构和页面相对应,比如multilang/App_LocalResources/login.aspx.resx对应于multilang/login.aspx页面。
	+页面后台的多语言资源。
		-共享资源:GetGlobalResourceObject("SharedJavaScriptResources", "Male"),也可以用强类型写法:Resources.SharedJavaScriptResources.Male
		-页面资源:GetLocalResourceObject("LoginSuccessMessage")
	+页面的多语言资源。
		-共享资源:控件属性(Title="<%$ Resources:SharedJavaScriptResources, Male %>");直接输出(<%= GetGlobalResourceObject("SharedJavaScriptResources", "Male") %>)
		-页面资源:控件属性(Title="<%$ Resources:WindowTitle %>");直接输出(<%= GetLocalResourceObject("Notice") %>)
	+客户端JavaScript中的多语言资源,直接调用F.getResource方法(可以简化为:window._R = F.getResource)。
		-在JavaScript中初始化资源:F.setResources({"Male": "男", "Female": "女"});
		-页面上注册多语言资源:<%= FineUIPro.PageContext.GetJavaScriptResourcesReference<Resources.SharedJavaScriptResources>() %>
	+设置当前语言,在PageBase中重载InitializeCulture方法,从Cookie中读取当前语言并赋值给Thread.CurrentThread.CurrentCulture。
	-新增示例:其他/多语言/登录页面;表格;树控件(复选框)。
+优化树表格展开折叠节点的性能(251081362)。
	-拥有3000个节点的树表格,展开或者折叠包含500个子节点的顶层父节点,耗时小于0.5秒。
	-新增示例:表格/树表格/列锁定/树表格(列锁定,3000个节点)。
-为在线示例的菜单目录增加子节点的个数。
-新增示例:表格/合计行/自定义合计(选中行合计)(余魁- https://t.zsxq.com/eCrKR)。
+修正通过客户端脚本启用列编辑时可能出现错误的问题(陈志添- https://t.zsxq.com/iEIiM)。
	-上述问题仅在未设置列的Editor属性,然后通过客户端脚本启用列编辑(entranceYearColumn.setEditable(true))时出现。
	-如果要实现单元格编辑表格的某一列不可编辑,建议在页面标签中定义列的Editor属性并禁用列编辑(EnableColumnEdit=false)功能。
	-参考示例:表格/单元格编辑/禁止编辑/禁止列编辑。
+表格列的EnableColumnEdit属性类型由布尔类型(bool)改为可空布尔类型(bool?)(兼容之前的代码)。
	-表格列的EnableColumnEdit属性仅在表格的AllowCellEditing=true时有效。
	-如果设置了列的属性EnableColumnEdit属性,则按照此属性启用或者禁用列的单元格编辑(RenderField列未设置Editor时默认为文本输入框)。
	+如果未设置列的属性EnableColumnEdit:
		-RenderField:如果未定义Editor,则禁用列的单元格编辑;如果定义了Editor,则启用列的单元格编辑。
		-RenderCheckField:则默认启用列的单元格编辑。
+复选框列RenderCheckField的RenderAsStaticField属性对单元格编辑的影响(兼容之前的代码)。
	-如果设置了RenderAsStaticField=true,则渲染为静态图标样式,任何情况下都不可编辑(无论是否启用单元格编辑)。
	-如果未定义RenderAsStaticField或者设置了RenderAsStaticField=false,则渲染为复选框样式。
		+表格的AllowCellEditing=true时:
			-启用了单元格编辑(未设置EnableColumnEdit或者设置EnableColumnEdit=true),则复选框和单元格都可以点击。
			-禁用了单元格编辑(设置EnableColumnEdit=false),则复选框不可以点击。
		-表格的AllowCellEditing=false时,则复选框和单元格都可以点击。
+[Pro]用来防止按钮快速重复点击的机制存在一个潜在问题(Herry-674197448)。
	-用户连续快速点击页面上的多个按钮,在服务端返回比较慢的情况下,只有最后一个按钮最终恢复启用状态,其他按钮会一直处于禁用状态。
	-历史遗留问题,由于我们将当前需要禁用的按钮名称保存为了一个全局变量,在第一个网络请求尚未返回的情况下,第二次点击的按钮名称覆盖了第一次点击的按钮名称。
-修正树控件EnableIcons=false时顶层节点的高度不正确的问题(34484135)。
+为前端库新增F.noConflict()函数(释放window.F命名空间,以便其他脚本可以使用它)。
	-新增示例:其他/释放window.F命名空间。
	-noConflict通常和FineUI.ready(function(F){})函数一起使用,此时局部变量F和全局变量window.F指向不同的对象。
	-相关文章:https://fineui.com/docs/#/Dev_in_Progress/5000_noconflict
-[Core]更新设计时文件自动生成工具,兼容.cshtml.cs文件为GB2312的情况,会正确识别中文格式并自动转化为UTF8格式(583883733)。
-修正按钮徽标动画在社区版不可用的问题(STARK11号 - https://t.zsxq.com/chm6q)。
-修正表格的DisplayType属性在Default(默认值)和Card之前切换时可能出现错误的问题(Hamny - https://t.zsxq.com/mqAby)。
-[Core-RazorForms]修正表格列在前台调整顺序之后回发,后台绑定数据出现列错位的问题(Hamny - https://t.zsxq.com/meZa5)。
#194
v11.7.2 2024-12-06
+页面上出现ID属性相同的控件(6976935)。
	-[Pro]如果存在重复ID,编译时报错(The type 'Button' already contains a definition for 'Button4')。
	-[Core]启用DebugMode时,如果存在重复ID,页面运行时会有弹框提示(不允许出现 ID 相同的控件)。
+[Core]表格数据绑定时报错(Could not determine JSON object type for type System.TimeOnly)(鸽子飞扬- https://t.zsxq.com/HReX7)。
	-DateOnly和TimeOnly结构类型是在.NET6中引入的,分别表示日期的“年月日”或者“时分秒毫秒”。
	-新增示例:表格/杂项/日期时间(DateOnly和TimeOnly)。
-[Core-RazorForms]修正拥有PageItems的表格回发时报错的问题(谭晓- https://t.zsxq.com/dxHUy)。
-[Pro]增加全局配置项ServerIP(如果服务器存在多个IP地址,此属性用来指定授权文件使用的IP地址,此地址必须是有效的)(419061050)。
-修正表格的beforeedit事件参数params无效的问题(34484135,一鸣- https://t.zsxq.com/DZvx9)。
-修正下拉表格启用内联过滤时可能出现弹出框无法关闭的问题(menu.xxx is not a function)(Hamny- https://t.zsxq.com/YM5rw)。
#193
v11.7.0 2024-11-25
+表格增强。
	+新增行编辑功能(IsRowEditing)。
		-单击或者双击激活行编辑(ClicksToEdit=1|2)。
		-行编辑状态下,TAB键使得焦点在编辑框之间跳转(如果启用TabVerticalNavigate,则会激活下一行的行编辑)。
		-行编辑状态下,改变行中的复选框状态,或者点击行中不可编辑单元格,不会结束行编辑状态。
		-新增示例:表格/行编辑/行编辑;(新增行与删除行);
		-相关文章:https://fineui.com/docs/#/Dev_in_Progress/3000_blur_event_focus_element
	-新增行提示符改为红色线条。
	-单元格已修改标识符由背景图片改为纯CSS样式实现。
	+为多列排序的标题栏文本增加排序序号(1, 2, 3...)。
		-更新示例:表格/排序/排序(多列排序);(多列排序,服务器端改变排序列),在工具栏显示当前的多个排序字段。
	-[Core-RazorForms]使用表格行命令标签和客户端rowcommand事件代替所有的列渲染函数renderDeleteAction。
	+更新示例:表格/单元格编辑/结束编辑/结束编辑(姓名不能为空,错误提示波浪线)。
		-更新某一行(rowId)姓名列(Name)的单元格样式:updateCellValue(rowId, 'Name.cls', 'errortip')。
		-相关文章:https://fineui.com/docs/#/Questions/3000_update_cell_value_and_style
	-列渲染函数设置params.cellAttrs时(Pro对应于RowDataBound事件中的e.CellAttributes属性),不再自动为属性名添加'data-'前缀(李成友- https://t.zsxq.com/jzfIZ)。
	-修正启用卡片模式的表格属性ScrollTopAfterPaging=true无效的问题(星云- https://t.zsxq.com/4W63I)。
-混淆回发请求参数__FSTATE,防止被网络拦截器嗅探(时间- https://t.zsxq.com/qS2CP)。
+表单控件增强。
	-数字输入框支持鼠标滚轮控制(向上滚动增加数字,向下滚动减少数字)。
	-新增示例:表单/输入框/数字输入框/数字输入框(自定义触发图标)。
	-更新上传控件样式(去掉了输入框和上传按钮之间的间隙)。
	-优化表单字段前缀和后缀的样式,更新示例:表单/表单字段前缀和后缀。
	-更新表单字段的下拉箭头样式(下拉列表、数字输入框)。
+[Core]模型类中的ErrorMessage属性支持占位符(鸽子飞扬- https://t.zsxq.com/iUmTx)。
	-之前:[Required(ErrorMessage="用户名不能为空!")] 现在:[Required(ErrorMessage = "{0}不能为空!")]
	-之前:[MaxLength(9, ErrorMessage = "密码最大为 9 个字符!")] 现在:[MaxLength(9, ErrorMessage = "{0}最大为 {1} 个字符!")]
	+自定义特性类UICompareAttribute也支持占位符。
		-比如一个视图模型中,定义了一个名为Number2的整型属性,它拥有如下比较特性:
		-之前:[Display(Name="数字2")][UICompare("Number1", Operator.GreaterThanEqual, ErrorMessage = "数字2应该大于等于数字1的值!")]
		-现在:[Display(Name="数字2")][UICompare("Number1", Operator.GreaterThanEqual, ErrorMessage = "{0}应该大于等于{1}的值!")]
		-示例:其他/数据模型/登录页面(数据注解);表单验证(扩展特性UICompare)。
-[Core]增加全局配置项ServerIP(如果服务器存在多个IP地址,此属性用来指定授权文件使用的IP地址,此地址必须是有效的)(Harbour- https://t.zsxq.com/Z1XV4)。
-[Core]修正后台无法更新CssClass属性的问题(验证示例:其他/CssClass与CssStyle属性;表单字段的Label样式)(6976935)。
-[Pro]修正后台获取面板的Collapsed属性错误的问题(明天会更好- https://t.zsxq.com/ReVec)。
-[Pro]修正下拉列表多选时选中值(SelectedValueArray)和文本(Text)顺序不一致的问题(曹**- https://t.zsxq.com/KgLaf)。
-修正表格列启用ShowToolTip属性在表格EncodeText=false时依然被HTML编码的问题(604658815)。
-FineUICore(RazorForms开发模式)在线示例数突破900个(https://forms.fineui.com/)。
#192
v11.6.0 2024-09-25
+优化客户端事件和服务端事件同时存在的执行逻辑。
    -先执行客户端事件,再执行服务端事件;如果客户端事件返回false,则不执行服务端事件。
    -新增示例:表单/杂项/同时定义客户端事件和服务端事件。
-修正点击复选框所在单元格(启用单元格编辑和ClicksToEdit=1)的空白区域无法改变单元格状态的问题。
-新增示例:表格/单元格编辑/杂项/复选框列(单选)(邱宁- https://t.zsxq.com/ZEaJ7)。
-新增示例:表格/事件/行单击回发事件;行双击回发事件;行取消选中事件。
+[Core]标签属性ValidateForms和DataDisplayFields类型由string改为原始的string[](不兼容提醒)。
    -将项目页面中的 ValidateForms=" 全部替换为 _ValidateForms=" 即可。
    -介绍文章:http://fineui.com/docs/#/Dev_in_Progress/1000_string_array_in_tag_helpers
+[Core]快速设置表格列属性的推荐写法(For="Users.First().ChineseName")。
    -此时生成的DataField为"ChineseName"(如果不使用For的推荐写法,可能需要手工设置DataField="ChineseName")。
    -此时可以设置QuickSortField="true"来启用列排序(无需显式指定排序字段SortField="Title")。
+[Core-RazorForms]新增表格行命令事件(RowCommand)和GridRowCommandEventArgs类。
    -通过f:Command标签设置文字(Text)或图标命令(IconUrl、IconFont、Icon),样式类(CssClass),确认对话框(ConfirmText)、提示信息(Tooltip)。
    -客户端事件为rowcommand,服务端事件使用GridRowCommandEventArgs接受回发参数(RowID、ColumnID和CommandName)。
    -高阶功能:
        -自定义命令文本(混合使用文本和图标),为一列定义多个命令按钮;
        -只执行前台事件(在前台事件中return false;阻止后台事件);禁用某一个行命令(可以在后台通过Grid1.FindCommand()方法找到命令实例)。
    -新增示例
        -表格/行命令/行命令(客户端事件);(服务端事件);(自定义命令文本);(多个图标命令)。
        -表格/行命令/行命令(执行前台事件,阻止后台事件);(禁用行命令)。
        -表格/行命令/弹出窗体列;(客户端事件)。
    +更新示例
        -表格/导出与下载/导出文件(行内下载,自定义POST请求)。
        -表格/扩展列/弹出窗体列(行命令);(窗体初始最大化);(选中多行)。
        -布局/内联框架/表格与编辑窗体;(提示对话框);(不关闭弹出窗体,刷新父页面表格)。
        -布局/在新标签页中打开/在新标签页中打开;(同一个标签页);(关闭后刷新父选项卡)。
    +介绍文章:
        - https://fineui.com/docs/#/FineUICore_RazorForms/148_Grid_RowCommand
        - https://fineui.com/docs/#/FineUICore_RazorForms/149_Grid_RowCommand_advanced
        - https://fineui.com/docs/#/FineUICore_RazorForms/1500_Grid_RowCommand_window
-新增示例:表格/行与列样式/行样式(RowRendererFunction)。
-新增示例:表格/行分组/行分组(隐藏特定的分组合计)(Alan- https://t.zsxq.com/ekTLG)。
#191
v11.5.0 2024-08-28
+优化内置的10个主题。
    -支持三种框架页风格(暗色侧栏、暗色顶栏、暗色顶栏和侧栏)。
    -移除不受支持的主题,当使用不受支持的内置主题时会自动重置为Pure_Black主题。
    -优化复选框、单选框、进度条和评分在表格选中行中的样式(jQueryUI相关主题)。
-[Core]修正图片控件回发时可能会出现无法将Double转为int?的错误(菜鸟-https://t.zsxq.com/dVvJr)。
-[Core]修正表格的DataKeyNames字段没有对应列时数据为空的问题(165458106)。
-打印时默认启用背景色,从而解决复选框的选中状态无法显示/按钮没有背景色等问题(Alan-https://t.zsxq.com/Id6t8)。
-jQuery升级到最新版本(v3.7.1)。
+[Core]更新自定义回发相关示例(将__doPostBack调用简化为__customEvent)。
    +客户端调用方式对比。
        -__doPostBack('', 'Grid1_EnableRows' + '$' + encodeURIComponent(JSON.stringify({action: 'enable', rowIDs: ['row1', 'row2']})));
        -__customEvent('Grid1_EnableRows', {action: 'enable', rowIDs: ['row1', 'row2']});
    +后台处理方式对比。
        -__doPostBack:共用Page_Load事件,调用Request.Form["__EVENTARGUMENT"]获取前台传入的数据,并自行解析事件参数。
        -__customEvent:独立的Page_CustomEvent事件,通过函数参数(CustomEventArgs)获取前台传入的数据(EventName、EventArguments或者EventArgumentsAsJObject)。
    +示例对比。
        -其他/自定义回发(__doPostBack)<==>自定义回发(__customEvent)。
        -表格/复选框列/复选框列(自定义选中改变事件,__doPostBack)<==>复选框列(自定义选中改变事件,__customEvent)。
-[Core]为控件增加Parent属性,用于获取当前控件的父控件(在页面第一次加载和页面回发时都有效)(165458106)。
-[Core]修正表格未定义表格列时进行数据绑定出错的问题(6976935)。
+[Core]为表格增加IncludeMergedData属性,可以在后台事件中直接使用表格的MergedData属性(6976935)。
    -更新示例:表格控件/单元格编辑/新增删除/新增行与删除行(MergedData)。
#190
v11.4.3 2024-07-16
-修正自动扩展高度的文本输入框可能会运行用户输入的JS脚本的问题(老牛10岁了-https://t.zsxq.com/Z8xnZ)。
-[Pro]修正点击按钮回发后未清空状态导致下次回发事件依然会激活按钮的问题(Herry674197448)。
#189
v11.4.2 2024-07-09
-修正HBox布局的面板(隐藏状态下)会导致页面出错的错误(419061050, 6976935)。
-修正包含富文本编辑器HtmlEditor时页面出现的错误(黄永鉴-https://t.zsxq.com/sNtki,STARK11号-https://t.zsxq.com/NKuou)。
-修正表格重新加载数据后设置SelectedRowIndexArray无效的问题(Alan-https://t.zsxq.com/Fq0fp)。
-修正单元格编辑为评分或者进度条时出现的显示错误(Herry674197448, 174399930)。
    -验证示例:表格/单元格编辑/杂项/单元格编辑(进度条);单元格编辑(评分)。
    +列渲染函数可以直接返回包含HTML标签的字符串,系统不会对返回值进行编码处理,所以需要自行对列渲染函数的返回值进行必要的HTML编码。
        -更新示例:表格/单元格编辑/杂项/客户端HTML编码(提示信息)。
#188
v11.4.0 2024-06-28
+可以在表格行内按钮事件中通过event.stopPropagation()来阻止事件冒泡,从而阻止行点击事件(weining-https://t.zsxq.com/mIcWr)。
    -更新示例:表格/行选择/行选择(自定义表头菜单)。
    -之前需要先找到节点再注册事件(direct event handler):grid1.el.find('.f-grid-colheader .custom-arrow-down').on('click', function (event)
    -现在可以使用jQuery的事件代理(delegated event handler):grid1.el.on('click', '.f-grid-colheader .custom-arrow-down', function (event)
+优化HBox和VBox布局的内部逻辑。
    +容器HBox布局且未设置高度时(BoxConfigAlign的默认值为Stretch),未设置高度的子项会填充容器的高度(不兼容提醒)。
        -验证示例:布局/Box/HBox(自动高度);HBox(自动高度,多层嵌套)。
        -如果想保持未定义高度子项的高度自适应,可以设置容器的BoxConfigAlign=Start。
    -更新示例(左侧图片会填充容器并垂直居中显示):基础/登录页面(验证码)。
    -新增示例:布局/Box/HBox(自动高度,BoxConfigAlign)。
-修正后台无法显示隐藏多表头列的问题(STARK11号-https://t.zsxq.com/aoUHQ)。
    -更新示例:表格/多表头/多表头(初始隐藏列)。
    +注意FineUIPro、FineUICore(MVC, RazorPages)和FineUICore(RazorForms开发模式)的实现不同。
        -FineUIPro中可以直接改变列的Hidden属性:var column=Grid1.FindColumn("zhumadian");column.Hidden=!column.Hidden;
        +FineUICore(MVC, RazorPages)
            -前台通过JS获取列的隐藏状态:new Parameter("anhuiHidden", "F.ui.Grid1.getColumn('anhui').hidden")
            -后台根据此状态调用表格帮助类的相应方法:if(anhuiHidden){UIHelper.Grid("Grid1").ShowColumn("anhui");}
        +FineUICore(RazorForms开发模式)
            -后台使用FineColumn获取表格列实例:var genderColumn = Grid1.FindColumn("Gender");
            -根据列的隐藏状态生成改变脚本:var scripts=""; if(genderColumn.Hidden){scripts=genderColumn.GetShowReference();}
            -向前台注册列隐藏状态改变的脚本:PageContext.RegisterStartupScript(scripts);
-[Core]修正SummaryData为空导致的错误(6976935)。
-[Core]修正客户端JS创建工具图标的菜单对象会导致页面回发错误的问题(artfairy-https://t.zsxq.com/mlveG)。
+优化PageContext的RegisterPreStartupScript方法,新增RegisterPostStartupScript方法。
    -简化方法签名,支持不定义Key的调用形式,比如:PageContext.RegisterPreStartupScript("window._SHENG=[...];");
    -参数addScriptTag的默认值为true。
        -这两个调用一样:RegisterPreStartupScript("window._SHENG=[...];"); 和 RegisterPreStartupScript("window._SHENG=[...];",true);
        -引入外部脚本的示例:PageContext.RegisterPostStartupScript("<script type=\"text/javascript\" src=\"/res/js/common.js\" />", false);
+[Core-RazorForms]异步代码支持(Page_Load和回发事件)。
    -将RazorFormsFilter的父类由IPageFilter改为IAsyncPageFilter。
    -Page_Load(同步签名):protected void Page_Load(object sender, EventArgs e)
    -Page_Load(异步签名):protected async Task Page_LoadAsync(object sender, EventArgs e)
    -按钮回发事件(同步签名):protected void Grid1_PageIndexChanged(object sender, GridPageEventArgs e)
    -按钮回发事件(异步签名):protected async Task Grid1_PageIndexChangedAsync(object sender, GridPageEventArgs e)
+[Core-RazorForms]简化自定义回发事件的触发与捕获。
    -增加CustomEventArgs类。
    -客户端增加__customEvent函数,如下两种调用方式效果一样。
        -方法一:__customEvent('Grid1_EnableRows', {action: 'enable', rowIDs: ['row1', 'row2']});
        -方法二:__doPostBack('', 'Grid1_EnableRows' + '$' + encodeURIComponent(JSON.stringify({action: 'enable', rowIDs: ['row1', 'row2']})));
    +后台可以通过Page_CustomEvent来处理自定义回发事件。
        -自定义回发事件(同步签名):protected void Page_CustomEvent(object sender, CustomEventArgs e)
        -自定义回发事件(异步签名):protected async Task Page_CustomEventAsync(object sender, CustomEventArgs e)
        -可以通过参数获取EventName和EventArguments(字符串)。如果前台传入的事件参数是一个对象,则可以直接使用属性:e.EventArgumentsAsJObject
+AppBoxCore/Pro更新(基于 FineUICore/Pro 的通用权限管理框架,包括用户管理、职称管理、部门管理、角色管理、角色权限管理等模块)。
    -升级到FineUICore/Pro(社区版)v11.4(AppBoxCore采用全新的RazorForms开发模式)。
    -AppBoxCore项目目标框架由.Net Core 3.1 升级到 .Net 8.0,建议使用VS2022打开项目工程。
    -更新了四个版本:AppBoxPro.EF, AppBoxPro.Dapper, AppBoxCore.EFCore, AppBoxPro.Dapper。
    -其中Dapper版本使用MySQL数据库,EF和EFCore版本使用SQLServer数据库。
#187
v11.2.1 2024-06-07
-修正表格列的Attributes属性导致的问题(17552774、余魁-https://t.zsxq.com/vM8xY)。
-修正LinkButtonField的DataCommandNameFields属性对应的值为空时出现异常的问题(4415852)。
-修正设置了OnClickFields属性而未设置OnClick属性出现异常的问题(6976935、一鸣-https://t.zsxq.com/nsHEs)。
-修正特殊情况下FindNode(nodeID).Expanded调用出现异常的问题(4415852)。
-修正FineUICore中在页面视图中设置SelectedRowIDArray无效的问题。
-修正CloseAction=HidePostBack的窗体关闭时Window1_closeArgument无法接受参数的问题(浪-https://t.zsxq.com/pUwy2)。
#186
v11.2.0 2024-05-28
+为FineUICore增加全局配置项EnableRazorForms(全球首创,在ASP.NET Core中运行WebForms业务代码)。
    -开启RazorForms开发模式
    -Page_Load事件的回归
    -页面回发事件与参数
    -共享一套代码(第一次加载和回发请求)
    -__doPostBack函数的回归(自定义回发)
    -注册客户端脚本(RegisterStartupScript)
    -动态创建控件
    -DataKeyNames和DataKeys属性的回归
    -下拉列表的PersistItems属性
    -禁用RazorForms的例外情况
    -自动化设计时文件生成工具(.designer.cs)
-客户端控件的type属性由全小写改为驼峰格式(比如buttongroup改为ButtonGroup,同时兼容之前的写法)。
+下拉列表控件的Text属性调整。
    -之前:仅用来表示用户输入的文本(只有在单选、允许编辑、不强制选择的情况下才有效)。
    -现在:下拉列表输入框的显示文本,任何情况下都可用。
    -举例一:之前需要遍历SelectedItemArray获取每一个选中项的Text属性,然后调用String.Join(",", texts.ToArray())生成文本的方式,现在只需要调用DropDownList1.Text属性即可。
    -举例二:ForceSelection=true时,可以使用DropDownList1.SelectedItem!=null判断存在选中项,也可以使用!String.IsNullOrEmpty(DropDownList1.Text)来确认存在选中项。
    -举例三:ForceSelection=false时,无论存在选中项还是用户输入值,Text属性都不为空,所以需要借助于IsUserInput属性来判断是否用户输入值。
-树控件的getCheckedNodes和getIndeterminateNodes返回的结果排除id="root"的根节点。
+简化F.addMainTab、F.addMainTabByHref函数以及选项卡控件addTab函数的参数列表,只保留一个options参数(兼容之前的写法)。
    -参数options.moveToEnd、options.actived和options.refreshWhenExist的默认值设为true。
+注意Active和Activate的区别(Active用作形容词),比如ActiveTabIndex,ActivePanelIndex(不兼容提醒!)。
    -TabStrip的GetActiveTabReference方法更名为GetActivateTabReference,客户端activeTab方法更名为activateTab。
    -Tab的GetActiveReference方法更名为GetActivateReference,客户端active方法更名为activate。
+窗体关闭时接受的参数名由closeArgument改为Window1_closeArgument(不兼容提醒!)。
    -JS示例中可以直接通过事件参数获取,代码如下:close: function(event, closeArgument) { }
    -FineUICore示例中,修改参数名:OnPostWindow1_Close(string[] Grid1_fields, string Window1_closeArgument)
    -更新示例:布局/内联框架/表格与编辑窗体(提示对话框)。
-修正启用BaseUrl时,将Image控件的ImageUrl属性设为绝对网址时出错的问题(Emotion-https://t.zsxq.com/19PSUg6HU)。
-FineUIPro中表格的PageIndexChange事件改名为PageIndexChanged。
+增强社区版功能。
    -下拉列表的全部功能社区版可用(多选复选框、自定义列表项、列表项分组)。
    -显示模式社区版可用(紧凑模式、小字体模式、普通模式、大字体模式、大间距模式)。
    -表格多行合计和客户端合计社区版可用。
#185