FineUI 官方论坛

标题: 提交BUG和建议若干 [打印本页]

作者: 杜志彬    时间: 2012-3-10 15:12
标题: 提交BUG和建议若干
首先感谢三生石上为我们封装了这么好的控件,感谢你的无私奉献。我对你的景仰如滔滔江水,连绵不绝,又犹如黄河泛滥,一发不可收拾……{:soso_e113:}

我测试了大约有两周时间,做了N个测试页面,越来越喜欢ExtAspNet。因为喜欢,所以希望ExtAspNet能够越来越好。提出一些问题,为ExtAspNet尽一点微薄之力。

一、建议:PageManage的Theme全局统一。在切换主题时能自动保存到Cookie中,每个页面能够按照Cookie=>ageManager.Theme=>web.config配置的优先级自动应用。这样就不需要每个页面再去手工指定了。

二、建议:现在的Alert.Show不是模式提示窗,在弹出提示窗后,在点击确认按钮前,后面的脚本已经执行了。而alert是模式窗口,在确认前,后面的脚本是不执行的。
例如我原来在提示后将文本框设置焦点,正常执行:
alert('用户名或密码错误。');
txtUserName.focus();
换成ExtAspNet按正常逻辑尝试以下代码,按说脚本应该串联执行,但不成功:
Alert.Show("用户名或密码错误。");
txtUserName.Focus();
在弹出提示框后,焦点就已经设置了,点确认或敲回车后,焦点消失。
现在使用的变通方式:
ExtAspNet.Alert.Show("用户名或密码错误。", "提示", string.Format("X('{0}').focus(true, 100);", txtUserName.ClientID));

三、建议:模板绑定时支持Eval,而现在只能用DataBinder.Eval(Container.DataItem, "IsDisabled") 这种形式。
<ext:TemplateField SortField="IsDisabled" HeaderText="作废" Width="50px">
<ItemTemplate>
<%# (bool)DataBinder.Eval(Container.DataItem, "IsDisabled") ? "作废" : "" %>
</ItemTemplate>
</ext:TemplateField>

四、建议:Grid等组件在设计视图中显示Toolbar。在HTML视图中添加修改控件属性可以接受,但添加事件就比较麻烦了,而Toolbar中的控件往往需要添加事件。

五、建议:为Window组件添加Show、ShowModal、Hide方法,可以在后台代码中调用直接显示或隐藏Window。

六、建议:为Grid组件添加SortColumn属性。由于Grid可能经常进行设计变动, 前后顺序一变动ColumnIndex就需要调整,而按字段是比较稳定的,另外   ColumnIndex 和 SortDirection  在设计属性中没有出现。下面是我现在的变通实现:
// TODO:默认的排序列和排序方向
grid.SortColumnIndex = grid.Columns.SingleOrDefault(a => a.SortField == "OperatorDate").ColumnIndex;
grid.SortDirection = "DESC";

七:BUG:如果Grid.DataKeyNames="Id"为GUID类型,则绑定时不显示。
脚本报错:
A JSONArray must start with '['

这个是个BUG,Grid的DataKeys如果是GUID类型的字段,就会抛出这个异常。我的解决办法是把ExtAspNet源代码中GridRow.cs的第241行由:
DataKeys[j] = GetPropertyValue(keyNames[j]);
改为:
DataKeys[j] = GetPropertyValue(keyNames[j]).ToString();
重新编译后重新引用就可以了。

八、BUG:Grid的排序标记在翻页或绑定后消失。
http://bbs.extasp.net/forum.php?mod=viewthread&tid=108&extra=page%3D1
我在PageLoad事件中指定了Grid的排序字段列和排序方向,并对数据进行了绑定。Grid的排序列是显示排序标志的(上、下小箭头),点击列标题也是显示排序标志的,但在对Grid重新进行绑定之后,排序标志就不见了。
我试过只要改变SortColumnIndex、SortDirection的值,就会出现排序标志。这也是为什么第一次绑定或者手工点击列标题进行排序时是正常的。

九、BUG:在显示确认修改提示后,如果我点“取消”或“x”号,则每次点击新增显示Window并关闭时都显示确认修改提示。
主页面:wdwSave.OnClientCloseButtonClick = wdwSave.GetConfirmHidePostBackReference();

在编辑页面:btnClose.OnClientClick = ExtAspNet.ActiveWindow.GetConfirmHidePostBackReference();

我想通过这样来确保不论是点击关闭按钮还是点击Window右上角关闭按钮的关闭,都能够检查是否已修改了编辑窗体。现在点关闭按钮btnClose是正常的,而点击Window右上角关闭按钮时,Window直接关闭而没有提示已被修改。在点击“新增”显示Window时,显示了确认修改提示。如果我点“取消”或“x”号,则每次点击新增显示Window并关闭时都显示确认修改提示。

十、BUG:Button的Menu.Hidden不起作用。如下面的使用帮助、关于菜单能正常显示。
<ext:Button ID="btnHelp" EnablePostBack="false" Icon="Help" Text="帮助" runat="server">
        <Menu runat="server" Hidden="true">
                <ext:MenuHyperLink ID="lnkHelp" runat="server" Text="使用帮助" Target="_blank" />
                <ext:MenuButton ID="btnAbout" runat="server" Text="关于" />
        </Menu>
</ext:Button>



作者: ⑥阿太⑥    时间: 2012-3-10 16:26
我再补充一条..  因为刚开始用EXTASPNET 我说的可能已经有考虑到了 只是我没发现而已
我现在想在后台做数据校验,按照现在的ALERT来做,发现问题,然后ALERT完了也就提交完了
我希望直接ALERT一下 然后后面的代码不再执行。

我以前用的ALERT带个参数,可以返回上一页,或者跳转到指定页面,或者关闭本窗体。是否考虑改进下,谢谢。
作者: sanshi    时间: 2012-3-10 18:07
赞!!!!!!

作者: Landroid    时间: 2012-3-10 18:38
建议:为TreeNode添加parentNode属性。
作者: 幻之达    时间: 2012-3-12 14:56
{:soso_e179:}
作者: 七色北斗星    时间: 2012-3-12 15:40
{:soso_e142:}
作者: sanshi    时间: 2012-4-8 18:01
一、建议:PageManage的Theme全局统一。在切换主题时能自动保存到Cookie中,每个页面能够按照Cookie=>ageManager.Theme=>web.config配置的优先级自动应用。这样就不需要每个页面再去手工指定了。

====暂时不改

二、建议:现在的Alert.Show不是模式提示窗,在弹出提示窗后,在点击确认按钮前,后面的脚本已经执行了。而alert是模式窗口,在确认前,后面的脚本是不执行的。
例如我原来在提示后将文本框设置焦点,正常执行:
alert('用户名或密码错误。');
txtUserName.focus();
换成ExtAspNet按正常逻辑尝试以下代码,按说脚本应该串联执行,但不成功:
Alert.Show("用户名或密码错误。");
txtUserName.Focus();
在弹出提示框后,焦点就已经设置了,点确认或敲回车后,焦点消失。
现在使用的变通方式:
ExtAspNet.Alert.Show("用户名或密码错误。", "提示", string.Format("X('{0}').focus(true, 100);", txtUserName.ClientID));

====这是没办法的,你的变通方法其实就是正确的做法。window.alert会阻塞JavaScript的执行,而我们弹出一个DIV层的做法不会阻塞JS的执行,只能采取回调的方式。


三、建议:模板绑定时支持Eval,而现在只能用DataBinder.Eval(Container.DataItem, "IsDisabled") 这种形式。
<ext:TemplateField SortField="IsDisabled" HeaderText="作废" Width="50px">
<ItemTemplate>
<%# (bool)DataBinder.Eval(Container.DataItem, "IsDisabled") ? "作废" : "" %>
</ItemTemplate>
</ext:TemplateField>

====新版已经支持Eval直接绑定数据


四、建议:Grid等组件在设计视图中显示Toolbar。在HTML视图中添加修改控件属性可以接受,但添加事件就比较麻烦了,而Toolbar中的控件往往需要添加事件。

=====设计时支持目前没精力添加,可以在写代码的时候参考示例代码。


五、建议:为Window组件添加Show、ShowModal、Hide方法,可以在后台代码中调用直接显示或隐藏Window。

=====现在在后台代码中只需直接设置Hidden属性就行了。参考示例:http://extasp.net/#/layout/window.aspx


六、建议:为Grid组件添加SortColumn属性。由于Grid可能经常进行设计变动, 前后顺序一变动ColumnIndex就需要调整,而按字段是比较稳定的,另外   ColumnIndex 和 SortDirection  在设计属性中没有出现。下面是我现在的变通实现:
// TODO:默认的排序列和排序方向
grid.SortColumnIndex = grid.Columns.SingleOrDefault(a => a.SortField == "OperatorDate").ColumnIndex;
grid.SortDirection = "DESC";

=====稍后再看

七:BUG:如果Grid.DataKeyNames="Id"为GUID类型,则绑定时不显示。
脚本报错:
A JSONArray must start with '['

这个是个BUG,Grid的DataKeys如果是GUID类型的字段,就会抛出这个异常。我的解决办法是把ExtAspNet源代码中GridRow.cs的第241行由:
DataKeys[j] = GetPropertyValue(keyNames[j]);
改为:
DataKeys[j] = GetPropertyValue(keyNames[j]).ToString();
重新编译后重新引用就可以了。


======新版本中已经修正。


八、BUG:Grid的排序标记在翻页或绑定后消失。
http://bbs.extasp.net/forum.php?mod=viewthread&tid=108&extra=page%3D1
我在PageLoad事件中指定了Grid的排序字段列和排序方向,并对数据进行了绑定。Grid的排序列是显示排序标志的(上、下小箭头),点击列标题也是显示排序标志的,但在对Grid重新进行绑定之后,排序标志就不见了。
我试过只要改变SortColumnIndex、SortDirection的值,就会出现排序标志。这也是为什么第一次绑定或者手工点击列标题进行排序时是正常的。

====翻页或重新绑定后数据变化了。。。。这个我有空再看下。


九、BUG:在显示确认修改提示后,如果我点“取消”或“x”号,则每次点击新增显示Window并关闭时都显示确认修改提示。
主页面:wdwSave.OnClientCloseButtonClick = wdwSave.GetConfirmHidePostBackReference();

在编辑页面:btnClose.OnClientClick = ExtAspNet.ActiveWindow.GetConfirmHidePostBackReference();

我想通过这样来确保不论是点击关闭按钮还是点击Window右上角关闭按钮的关闭,都能够检查是否已修改了编辑窗体。现在点关闭按钮btnClose是正常的,而点击Window右上角关闭按钮时,Window直接关闭而没有提示已被修改。在点击“新增”显示Window时,显示了确认修改提示。如果我点“取消”或“x”号,则每次点击新增显示Window并关闭时都显示确认修改提示。

=====这个在新版本也修正了吧,你确认下。


十、BUG:Button的Menu.Hidden不起作用。如下面的使用帮助、关于菜单能正常显示。
<ext:Button ID="btnHelp" EnablePostBack="false" Icon="Help" Text="帮助" runat="server">
        <Menu runat="server" Hidden="true">
                <ext:MenuHyperLink ID="lnkHelp" runat="server" Text="使用帮助" Target="_blank" />
                <ext:MenuButton ID="btnAbout" runat="server" Text="关于" />
        </Menu>
</ext:Button>

=====Hidden属性的问题在新版本中也修正了。



==============
再次谢谢楼主,其实这里面提到了很多BUG,只是当时没忙过来,现在才缓过神来。。。。{:soso__8961432591078930798_3:}




作者: sanshi    时间: 2012-4-8 20:38
第六条和第八条都修正了,ChangeSet:75897

-可以直接在ASPX中指定SortDirection和SortColumnIndex,同时增加SortColumn属性(杜志彬)。
-修正Grid的排序标记在翻页或绑定后消失的问题(杜志彬)。
作者: Landroid    时间: 2012-4-8 21:51
sanshi 发表于 2012-4-8 20:38
第六条和第八条都修正了,ChangeSet:75897

-可以直接在ASPX中指定SortDirection和SortColumnIndex,同时 ...

sanshi辛苦了
作者: 影子    时间: 2012-4-19 10:24
mark,学习中
作者: 杜志彬    时间: 2012-9-19 03:00
谢谢。测试了一下第六条,修正之后如果只指定SortColumn,不指定SortColumnIndex的话,在绑定时会抛出异常:
[NullReferenceException: 未将对象引用设置到对象的实例。]
   ExtAspNet.Grid.get_SortColumnIndex() +135

在断点跟踪时,SortColumnIndex为null。

重现代码:
            // 默认的排序列和排序方向
            grid.SortColumn = "OperatorDate";
            //grid.SortColumnIndex = 3;
            grid.SortDirection = "DESC";            。。。省略部分
            grid.DataSource = list.AsQueryable().SortBy(grid.SortColumn + " " + grid.SortDirection).Skip(grid.PageSize * grid.PageIndex).Take(grid.PageSize);
            grid.DataBind();

我的理解:SortColumn和SortColumnIndex应该是联动的,指定其中任一属性均可。例如我指定SortColumn = "OperatorDate", 获取SortColumnIndex时应为3,反之亦可。

结论:需求未完整实现。





欢迎光临 FineUI 官方论坛 (https://fineui.com/bbs/) Powered by Discuz! X3.4