+[安全更新]增加全局配置项EncodeText(在浏览器端进行HTML编码,默认值为true)(路人甲-https://t.zsxq.com/15KfMax14)(不兼容提醒!)。 +创新设计,简单易用。 -全局启用EncodeText配置项之后,所有控件的文本属性在渲染到页面之前都会被HTML编码(包含但不限于面板标题栏文本、表格列数据、消息框正文、树节点、按钮文本、菜单文本等)。 -极少数情况例外(不会进行HTML编码):下拉列表项ListItem的Display属性,表格列的渲染函数,Mvc/Core中面板的Content扩展方法。 -设计规则:如果控件的极个别属性不需要HTML编码,又不想禁用控件的EncodeText属性,可以将文本包含在<raw></raw>标签之内,FineUI会自动识别此标签并禁用HTML编码。 -举例一:Alert.Show('<b>text1</b>')会对文本进行HTML编码,如果想将text1显示为粗体,可以这么写:Alert.Show('<raw><b>text1</b></raw>')。 -举例二:表格为空时的EmptyText属性使用了标签,可以这么写:Grid1.EmptyText="<raw><img src='/res/images/no_data_found.png'/></raw>"; +此灵感来自于: -CSS特例:如果想覆盖某个样式而忽略更高优先级的样式,可以这么写:.class1 { color: red !important; } -React:由于可以将标签写入JS代码,所以可以明确区分字符串(msg.info('<b>text1</b>');)还是标签(msg.info(<b>text1</b>);)。 -ASP.NET Core:默认会对输出到页面上的所有文本进行HTML编码,特例使用@Html.Raw('<b>text1</b>')函数。 +全局配置项与控件基类属性。 -为控件基类新增EncodeText属性(类型是可空布尔,默认为空,继承同名全局配置项)。 -不同的设置其作用域不同(Web.config/appsettings.json整个站点,PageManager当前页面,Grid当前表格,GridColumn表格中的某一列)。 +客户端的HTML编码有助于阻止潜在的XSS攻击。 -ASP.NET WebForms/MVC5框架会拦截包含HTML标签的请求(用户可以使用ValidateRequest页面属性,或者ValidateInput注解关闭此拦截)。 -ASP.NET Core团队不建议拦截包含HTML标签的请求,而是推荐在将字符串输出到页面上时进行HTML编码。 -详细的讲解文章 Escaping output html is a far better way to mitigate against XSS(https://t.zsxq.com/15NoBGm0e)。 +全局EncodeText属性对Label控件的影响。 -Label、HyperLink、Image和LinkButton的EncodeText属性继承自父类(之前此属性表示服务器端编码,现在此属性表示浏览器端编码)。 -更新示例(.customlabel span => .customlabel .f-field-label):表单/基本元素/文本标签。 +全局EncodeText属性对FineUICore/Mvc的Label控件扩展方法Text的影响。 -后台使用Text()方法更新Label时,如果标签文本包含HTML编码,则需要在前台设置EncodeText为false。 -为了避免误解,将Text()方法的第二个参数名由encodeText改为encodeTextOnServerSide,默认值由true改为false。 -推荐将Text方法的第二个参数(encodeTextOnServerSide)留空,而是由Label控件的EncodeText属性决定是否进行客户端HTML编码。 -后台代码:UIHelper.Label("labResult").Text("<strong>text1</strong>",false); => UIHelper.Label("labResult").Text("<strong>text1</strong>")。 -前端代码:F.Label().ID("labResult") => F.Label().ID("labResult").EncodeText(false)。 -相关示例很多,包含但不局限于:表单/下拉列表控件/多选/...。 +全局EncodeText属性对Grid控件的影响。 -删除表格列RenderField的ClientHtmlEncode属性,替换为EncodeText(bool?)属性。 -删除FineUIPro中服务器渲染列(BoundField、WindowField、LinkButtonField等)的HtmlEncode属性,替换为EncodeText(bool?)属性。 -无需设置列的EncodeText=true,因为表格列默认会使用全局配置项。 -更新示例(删除ClientHtmlEncode属性):表格/单元格编辑/杂项/客户端HTML编码;客户端HTML编码(提示信息)。 +全局EncodeText属性对F.js的影响。 -如果Label控件包含HTML标签,则需要增加encodeText=false属性。 +更新了如下示例。 -PageBaseMobile.cs,为DataList的项模板添加'<raw>...</raw>'外层标签。 -导航/选项卡控件/基本用法,更新第二个选项卡的标题文本:Title="<raw><span class='highlight'>标签二(高亮)</span></raw>" -移动/列表控件/列表(超链接,详细面板),为Label2设置EncodeText=false,JS中更新标签值:F(label2).setValue('<div...></div>'); -表格/行选择/行选择(自定义表头菜单),自定义全选列的标题栏文本:Grid1.CheckBoxSelectHeaderText="<raw><i class='f-icon f-iconfont...'></i></raw>"; -表格/杂项/自定义表头过滤菜单,自定义标题栏文本:atSchoolColumn.HeaderText = "<raw>是否在校<i class='f-icon f-iconfont...'></i></raw>"; -表格/复选框列/复选框列(全选列,自定义标题栏复选框):atSchoolColumn.HeaderText = "<raw><i class='f-icon f-grid-checkbox...'></i> 是否在校1</raw>"; -表单/选择框/复选框(开关样式),自定义开关文本为图标字体:CheckBox5.SwitchOnText = "<raw><i class=\"f-icon f-iconfont f-iconfont-check\"></i></raw>"; -其他/消息框/通知对话框(向父页面添加选项卡),自定义消息内容:Notify n=new Notify();n.Message="<raw><a href='javascript:...'>向父页面添加选项卡</a></raw>"; -其他/消息框/通知对话框(分组显示),自定义消息内容:message:'<raw>这是第<strong>' + _orderNumber + '</strong>条提示信息</raw>' -其他/捕获全局JavaScript错误,自定义消息内容:F.alert('<raw>'+errors.join('<br/>')+'</raw>', 'JavaScript错误!', 'error'); -表格控件/卡片模式/排序/卡片模式(排序):<f:ToolbarText ID="btnSortLabel" EncodeText="false" runat="server"> -导航/树控件/事件/节点绑定事件,自定义某些树节点:e.Node.Text=String.Format("<raw><span class='highlight'>{0}</span></raw>", e.Node.Text); -表格/卡片模式/杂项/卡片模式(重新绑定),自定义表格为空提示信息:Grid1.EmptyText=String.Format("<raw><img src='/res/images/no_data_found.png'/></raw>"); -移动/消息框/通知对话框,自定义正在加载样式:notify.Message="<raw><div class='f-loading'>...</div></raw>"; -移动/表单控件/登录页面(自定义错误提示框),自定义提示消息:F.alert({message: '<raw>' + alertHtml.join('') + '</raw>'}); -表格/单元格编辑/新增删除/服务器端删除行,自定义按钮的ConfirmText属性:ConfirmText=String.Format("<raw>确定删除 <b><script>{0}</script></b> 行数据?</raw>",Grid1.GetSelectedCountReference()); -优化在线示例的查看页面源代码样式,增加行号,支持内置的深色主题(Dark Hive)。 +[FineUICore/Mvc]更新HTML编辑器相关示例:其他/第三方组件/UEditor。 +向后台传递数据时,无需进行HTML编码。 -之前:OnClickParameter1="@(new Parameter("text", "F.htmlEncode(F.ui.HtmlEditor1.getValue())"))" -现在:OnClickParameter1="@(new Parameter("text", "F.ui.HtmlEditor1.getValue()"))" -使用FineUI的Notify类展示数据时,也无需自行编码(因为FineUI默认会进行HTML编码)。 +列渲染函数可以返回jQuery节点(使用jQuery对象构造DOM节点更加安全)。 -之前:return F.formatString('<div>{0}</div>', F.htmlEncode(text1)); -现在可以这样写:return $('<div>', {'html': F.htmlEncode(text1)}); -或者这样写:return $('<div>', {'text': text1}); 或者:return $('<div>').text(text1);(jQuery的text函数会自动进行HTML编码) -更新JS文件:res/js/grid.js;gridcard.js。 -更新示例:表格/杂项/提示信息(RendererFunction);提示信息(ShowToolTip)。 -增加示例:表格/杂项/提示信息(cellAttrs)。 -更新示例(修正提示文本无法显示的问题):其他/页面回发提示(大灰狼-https://t.zsxq.com/169zLaTN3)。 -修正禁用的复选框列依然可以点击改变状态的问题(imyoung-https://t.zsxq.com/17jeWNNLn)。 +将表格行数据的index属性标记为已废除(以后版本会删除),请不要使用如下属性。 -通过getRowData()获取的行数据,例如F.ui.Grid1.getRowData('row1').index(已废除)。 -行渲染函数的第二个参数中的rowIndex属性,例如renderGender(cellValue,params)中params.rowIndex属性(已废除)。 -表格行事件的第三个参数,例如onGridRowDblclick(event,rowId,rowIndex)中的rowIndex属性(已废除)。 -修正DropDownBox的下拉框无法遮挡HtmlEditor的问题(在输入框获取焦点之后)(6976935)。 +增强基础版功能。 -输入框的清空图标基础版可用(日期选择框、时间选择框、触发器输入框,下拉列表框)。 -复选框列表的自适应列宽度功能基础版可用。 -数字输入框的全部功能基础版可用(千分位、四舍五入、前后缀、触发图标类型)。 -日期控件和日期选择器的全部功能基础版可用(选择时间,只显示年份/月份/时间)。 -单元格编辑表格的AutoSelectEditor属性基础版可用。 +关闭页面前的确认框基础版可用。 -表单/杂项/关闭页面前的确认框(F.beforeUnload);(表单和可编辑表格)。 -表格/单元格编辑/数据改变/数据改变(关闭页面前提示框)。