any question about DevFx, please post here

Coordinator
Sep 28, 2007 at 4:55 AM
join it.
Nov 14, 2007 at 6:44 AM
Edited Nov 14, 2007 at 6:52 AM
你好,昨天下载了代码,调试了一下,添加时报错:
错误代码:0
错误等级:70000
错误描述:没有要访问的 Current 数据。
错误序列号:39686545
发生错误的页面地址:/devfx/security/groupEdit.aspx?ParentNo=0

无论是哪个板块,只要是添加记录,就会报这条错,编辑功能正常。

我调试了一下,出错代码在这里

/// <summary>
/// 安全的获取DataRow指定列指定版本的值
/// </summary>
/// <param name="row">DataRow</param>
/// <param name="fieldName">列名</param>
/// <param name="rowVersion">列版本</param>
/// <param name="defaultValue">此列的默认值(如果获取失败,则返回此默认值)</param>
/// <returns>列的值</returns>
public static object GetValueSafely(DataRow row, string fieldName, DataRowVersion rowVersion, object defaultValue) {
object value = rowfieldName, rowVersion;
if (Convert.IsDBNull(value)) {
DataColumn column = row.Table.ColumnsfieldName;
if (!Convert.IsDBNull(column.DefaultValue)) {
value = column.DefaultValue;
} else {
value = defaultValue;
}
}
return value;
}

貌似是因为rowVersion的值的问题而出错~

无奈下我只好注释了object value = rowfieldName, rowVersion;
改写为object value = rowfieldName;


rowVersion是个什么东西?作用是什么?怎么解决?thanks!

Nov 14, 2007 at 8:42 AM
2007-11-14 08:36:10.201Level=70000, Source=Microsoft.VisualStudio.WebHost.Host::Void ProcessRequest(Microsoft.VisualStudio.WebHost.Connection)
没有要访问的 Current 数据。
POST http://localhost:1410/devfx/security/userEdit.aspx?ReturnUrl=user.aspx
hash code:15426610
request heads:
Cache-Control=no-cache&Connection=Keep-Alive&Content-Length=906&Content-Type=application%2fx-www-form-urlencoded&Accept=image%2fgif%2cimage%2fx-xbitmap%2cimage%2fjpeg%2cimage%2fpjpeg%2capplication%2fx-shockwave-flash%2capplication%2fmsword%2capplication%2fvnd.ms-excel%2capplication%2fvnd.ms-powerpoint%2c%2f&Accept-Encoding=gzip%2cdeflate&Accept-Language=zh-cn&Cookie=.devfxauth%3dd5d84c69-f234-4842-bf8a-21907978a3e6&Host=localhost%3a1410&Referer=http%3a%2f%2flocalhost%3a1410%2fdevfx%2fsecurity%2fuserEdit.aspx%3fReturnUrl%3duser.aspx&User-Agent=Mozilla%2f4.0(compatible%3bMSIE6.0%3bWindowsNT5.1%3bSV1%3b.NETCLR+2.0.50727)
error data:
System.Data.VersionNotFoundException: 没有要访问的 Current 数据。
在 System.Data.DataRow.GetCurrentRecordNo()
在 System.Data.DataRow.GetRecordFromVersion(DataRowVersion version)
在 System.Data.DataRow.get_Item(String columnName, DataRowVersion version)
在 HTB.DevFx.Data.Utils.DataHelper.GetValueSafely(DataRow row, String fieldName, DataRowVersion rowVersion, Object defaultValue) 位置 C:\Documents and Settings\Administrator\桌面\DevFxv11.0.109.0\DevFxv1.0.109.0\BaseFx\Data\Utils\DataHelper.cs:行号 50
在 HTB.DevFx.Data.Utils.DataHelper.GetValueSafely(DataRow row, String fieldName, Object defaultValue) 位置 C:\Documents and Settings\Administrator\桌面\DevFxv11.0.109.0\DevFxv1.0.109.0\BaseFx\Data\Utils\DataHelper.cs:行号 38
在 HTB.DevFx.Security.Entity.SafelyGetValue(String propertyName, Object defaultValue) 位置 C:\Documents and Settings\Administrator\桌面\DevFxv11.0.109.0\DevFxv1.0.109.0\Security\Entity.cs:行号 65
在 HTB.DevFx.Security.Entity.SafelyGetValueT(String propertyName, T defaultValue) 位置 C:\Documents and Settings\Administrator\桌面\DevFxv11.0.109.0\DevFxv1.0.109.0\Security\Entity.cs:行号 76
在 HTB.DevFx.Security.Entity.SafelyGetValueT(String propertyName) 位置 C:\Documents and Settings\Administrator\桌面\DevFxv11.0.109.0\DevFxv1.0.109.0\Security\Entity.cs:行号 87
在 HTB.DevFx.Security.User.getUserNo() 位置 C:\Documents and Settings\Administrator\桌面\DevFxv11.0.109.0\DevFx_v1.0.109.0\Security\User.cs:行号 59
在 HTB.DevFx.Security.UserManager.SaveItem(User user) 位置 C:\Documents and Settings\Administrator\桌面\DevFxv11.0.109.0\DevFxv1.0.109.0\Security\UserManager.cs:行号 193
在 HTB.DevFx.Security.UserManager.HTB.DevFx.Security.IManager.SaveItem(IEntity item) 位置 C:\Documents and Settings\Administrator\桌面\DevFxv11.0.109.0\DevFxv1.0.109.0\Security\UserManager.cs:行号 495
在 HTB.DevFx.Security.Entity.Save() 位置 C:\Documents and Settings\Administrator\桌面\DevFxv11.0.109.0\DevFxv1.0.109.0\Security\Entity.cs:行号 200
在 HTB.DevFx.Security.Web.Pages.Security.UserEditPage.SaveUser(User u) 位置 C:\Documents and Settings\Administrator\桌面\DevFxv11.0.109.0\DevFxv1.0.109.0\Security.Web\devfx\security\userEdit.aspx.cs:行号 108
在 HTB.DevFx.Security.Web.Pages.Security.UserEditPage.btnSubmitClick(Object sender, EventArgs e) 位置 C:\Documents and Settings\Administrator\桌面\DevFxv11.0.109.0\DevFx_v1.0.109.0\Security.Web\devfx\security\userEdit.aspx.cs:行号 118
在 System.Web.UI.WebControls.Button.OnClick(EventArgs e)
在 System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
在 System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
在 System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
在 System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
在 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
request data:
_EVENTTARGET=&_EVENTARGUMENT=&_VIEWSTATE=%2FwEPDwULLTE3OTkyMDk4NjkPFgIeKWh0Yi5kZXZmeC5zZWN1cml0eS53ZWIuYmFzZXBhZ2UucmV0dXJudXJsBQl1c2VyLmFzcHgWAgIDD2QWBgIHDxBkZBYBAgFkAgsPEA8WBh4NRGF0YVRleHRGaWVsZAULSW5kZW50VGl0bGUeDkRhdGFWYWx1ZUZpZWxkBQdHcm91cE5vHgtfIURhdGFCb3VuZGdkEBUBEuaJgOacieeUqOaIt%2Be7hFswXRUBATAUKwMBZ2RkAg8PEA8WBh8BBQVUaXRsZR8CBQZSb2xlTm8fA2dkEBUDD%2Bezu%2Be7n%2BeuoeeQhuWRmAbmnaXlrr4M5pmu6YCa55So5oi3FQMFYWRtaW4FZ3Vlc3QFdXNlcnMUKwMDZ2dnZGQYAQUeX19Db250cm9sc1JlcXVpcmVQb3N0QmFja0tleV9fFgQFCWxieEdyb3VwcwUObGJ4QXZhaWxHcm91cHMFCGxieFJvbGVzBQxsYnhBYWlsUm9sZXPOVF11uk%2F8%2FlM%2F43blPrgK0yiHeA%3D%3D&txtUserNo=ytzz&txtUserName=ytzz&txtPassword=ytzz&ddlIsAvailable=True&btnSubmit=%E6%8F%90+%E4%BA%A4&_EVENTVALIDATION=%2FwEWEQLk2fmDBAKu8ei6AgKl1bKzCQK1qbSRCwKwyPrOCgLU4KKCCgLJhuTKDAKtrryGDALzobvbCQKww%2BGBCgKCx%2FThBwLnyob8AgKp1ea3AgKIwISsDQKAm%2BKIAwLJkcbrCwLCi9reAwW4nr3YvQ%2BZrX%2FX0JW5900b7ftP
client ip:127.0.0.1
server name/ip:C84A890E09074B1
auth username:admin
Coordinator
Nov 15, 2007 at 5:26 AM
不好意思,这是一个BUG,已修正,请下载最新版本DevFxv1.0.136.0build20071023
非常感谢您关注DevFx.NET

ytzz wrote:
你好,昨天下载了代码,调试了一下,添加时报错:
错误代码:0
错误等级:70000
错误描述:没有要访问的 Current 数据。
错误序列号:39686545
发生错误的页面地址:/devfx/security/groupEdit.aspx?ParentNo=0

无论是哪个板块,只要是添加记录,就会报这条错,编辑功能正常。

我调试了一下,出错代码在这里

/// <summary>
/// 安全的获取DataRow指定列指定版本的值
/// </summary>
/// <param name="row">DataRow</param>
/// <param name="fieldName">列名</param>
/// <param name="rowVersion">列版本</param>
/// <param name="defaultValue">此列的默认值(如果获取失败,则返回此默认值)</param>
/// <returns>列的值</returns>
public static object GetValueSafely(DataRow row, string fieldName, DataRowVersion rowVersion, object defaultValue) {
object value = rowfieldName, rowVersion;
if (Convert.IsDBNull(value)) {
DataColumn column = row.Table.ColumnsfieldName;
if (!Convert.IsDBNull(column.DefaultValue)) {
value = column.DefaultValue;
} else {
value = defaultValue;
}
}
return value;
}

貌似是因为rowVersion的值的问题而出错~

无奈下我只好注释了object value = rowfieldName, rowVersion;
改写为object value = rowfieldName;


rowVersion是个什么东西?作用是什么?怎么解决?thanks!



Nov 17, 2007 at 12:20 AM
thanks ,我下载了试试。感谢您开源。有问题我会及时反馈的。
Dec 21, 2007 at 1:36 AM
您好:
我下载并应用您的权限框架,发现一个问题(?):
我用admin帐号登录以后,无法查看其他角色的权限列表,不知是故意要如此,还是系统设置只能查看自己的权限列表?
如果只是能看自己的权限列表,是否不便对角色权限的管理?
Coordinator
Dec 21, 2007 at 4:58 AM
是设计使然;
你可以把admin这个账户加到需要管理的角色中,这样使用admin登录就能看到相应的角色权限了。

感谢您的关注。


hebiziyu wrote:
您好:
我下载并应用您的权限框架,发现一个问题(?):
我用admin帐号登录以后,无法查看其他角色的权限列表,不知是故意要如此,还是系统设置只能查看自己的权限列表?
如果只是能看自己的权限列表,是否不便对角色权限的管理?

Dec 21, 2007 at 5:59 AM
有的地方新建还是会出我说的上述问题.最近比较忙.没再仔细测了...
Dec 21, 2007 at 6:56 AM
多谢及时回复。
这个问题我早些时间通过反复测试已经了解了。
不知何时能够提供更多一些的相关文档出来呢?比如权限设置、角色设置方面的一些东东。
再次感谢您所做的一切。
Coordinator
Dec 21, 2007 at 7:00 AM
恩,真的吗?这就怪了,估计要重新在测测了。


ytzz wrote:
有的地方新建还是会出我说的上述问题.最近比较忙.没再仔细测了...

Coordinator
Dec 21, 2007 at 7:11 AM
呵呵,我早就想写点什么了,否则大家都不知道DevFx是啥玩艺,无奈最近工作比较忙,也很懒,文档一直是缺失的
最近一定要写些东西了。

感谢您的关注。


hebiziyu wrote:
多谢及时回复。
这个问题我早些时间通过反复测试已经了解了。
不知何时能够提供更多一些的相关文档出来呢?比如权限设置、角色设置方面的一些东东。
再次感谢您所做的一切。


Dec 21, 2007 at 2:44 PM
hi,您在代码注释中如此写道:
/// 在应用程序中,可以这么获得本类实例:<c>Securitor.Authorization</c><br />
/// 本类为各种验证用户是否有权限提供了各种重载方法,以期简化权限判断<br />
/// 下面示例演示一种权限判断的方法:
/// <code>
/// private void Page_Load(object sender, EventArgs e) {
/// if(Securitor.Authorization.Authorize(Const.CanDoSomething).IsSuccess) {
/// //access accepted
/// } else {//access denied
/// this.lblMessage.Text = "您没有权限";
/// return;
/// }
/// }


但我在测试中发现根本没有办法使用Securitor.Authorization.Authorize这个方法。总是无法获取Securitor的实例。
而另外一个用法:
if(Securitor.Authorization.Authorize(Const.CanDoSomething, SomethingNo).IsSuccess)
则总是无法正确判断权限。不知何故。
请告知办法,多谢。
Coordinator
Dec 24, 2007 at 2:29 AM
你可以把出错的信息贴到这里,另外请确认web.config是否配置了框架的HttpModule


hebiziyu wrote:
hi,您在代码注释中如此写道:
/// 在应用程序中,可以这么获得本类实例:<c>Securitor.Authorization</c><br />
/// 本类为各种验证用户是否有权限提供了各种重载方法,以期简化权限判断<br />
/// 下面示例演示一种权限判断的方法:
/// <code>
/// private void Page_Load(object sender, EventArgs e) {
/// if(Securitor.Authorization.Authorize(Const.CanDoSomething).IsSuccess) {
/// //access accepted
/// } else {//access denied
/// this.lblMessage.Text = "您没有权限";
/// return;
/// }
/// }


但我在测试中发现根本没有办法使用Securitor.Authorization.Authorize这个方法。总是无法获取Securitor的实例。
而另外一个用法:
if(Securitor.Authorization.Authorize(Const.CanDoSomething, SomethingNo).IsSuccess)
则总是无法正确判断权限。不知何故。
请告知办法,多谢。

Dec 25, 2007 at 9:40 AM
首先:下面的写法,根本无法编译通过。提示 Error 2 'HTB.DevFx.Security.Securitor' does not contain a definition for 'Authorization'
if (HTB.DevFx.Security.Securitor.Authorization.Authorize(sPermissionNo).IsSuccess)
{
//access accepted
}
else
{//access denied
// this.lblMessage.Text = "您没有权限";
return;
}
我的页面是继承自你的基类页面的
public class TKWebBasePageWithPower : HTB.DevFx.Security.Web.BasePage

其次:我的webconfig文件就是用的你的demo中的。应该没问题的。
麻烦你给看一下。
多谢。
Coordinator
Dec 26, 2007 at 5:16 AM
不好意思,注释的意图是对的,只是Securitor没有定义'Authorization',这会在下个版本改进
作为替代,你可以这么写Securitor.Authorize(sPermissionNo, string.Empty, false).IsSuccess
非常谢谢您的关注。

hebiziyu wrote:
首先:下面的写法,根本无法编译通过。提示 Error 2 'HTB.DevFx.Security.Securitor' does not contain a definition for 'Authorization'
if (HTB.DevFx.Security.Securitor.Authorization.Authorize(sPermissionNo).IsSuccess)
{
//access accepted
}
else
{//access denied
// this.lblMessage.Text = "您没有权限";
return;
}
我的页面是继承自你的基类页面的
public class TKWebBasePageWithPower : HTB.DevFx.Security.Web.BasePage

其次:我的webconfig文件就是用的你的demo中的。应该没问题的。
麻烦你给看一下。
多谢。

Dec 26, 2007 at 5:57 AM
谢谢答复。之前我也已经用了另外一种方法来判断权限了。
bool isPower = false;
for (int i = 0; i < HTB.DevFx.Security.Securitor.PermissionManager.ListItem().Length; i++)
{
HTB.DevFx.Security.Permission p = HTB.DevFx.Security.Securitor.PermissionManager.ListItem()i;
if (p.PermissionNo == sPermissionNo)
{
isPower = true;
break;
}
}
return isPower;

期待更好的版本以及文档的发布。谢谢。
Coordinator
Dec 26, 2007 at 6:59 AM
不建议你这么做,效率太低了;采用Securitor.Authorize(sPermissionNo, string.Empty, false).IsSuccess来判断是最好的。


hebiziyu wrote:
谢谢答复。之前我也已经用了另外一种方法来判断权限了。
bool isPower = false;
for (int i = 0; i < HTB.DevFx.Security.Securitor.PermissionManager.ListItem().Length; i++)
{
HTB.DevFx.Security.Permission p = HTB.DevFx.Security.Securitor.PermissionManager.ListItem()i;
if (p.PermissionNo == sPermissionNo)
{
isPower = true;
break;
}
}
return isPower;

期待更好的版本以及文档的发布。谢谢。

Dec 26, 2007 at 7:05 AM
是啊,之前也发现了效率低的问题。
现在已经按照你的方法进行了调整。
谢谢及时回复。
Coordinator
Dec 26, 2007 at 9:05 AM
谢谢您的关注,如果您觉得好用,请推荐给你的亲朋好友使用:P


hebiziyu wrote:
是啊,之前也发现了效率低的问题。
现在已经按照你的方法进行了调整。
谢谢及时回复。

Dec 26, 2007 at 10:57 AM
会的。目前我已经推荐给我的几个朋友。其中有一个已经用于项目开发了。
这里有一个问题:
框架中的用户信息很少。如果我想附加更多的用户信息到全局的类中去,你认为最好的办法是什么呢?
是直接扩充你的auth_user表,还是另外写一张表来存储我需要的附加信息呢?

(另外:是否方便msn交流?我的msn:hebiziyu88@hotmail.com)
Coordinator
Dec 27, 2007 at 5:42 AM
简单点,你可以扩充AUTH_USER表,要查询或修改User信息,可以这么做User"ExtField" = xxx;你还可以扩展User类,在配置文件中替换为你定义的类即可
用这个方法尝试一下;你可能需要修改DataSet的Schema

非常感谢您的关注。


hebiziyu wrote:
会的。目前我已经推荐给我的几个朋友。其中有一个已经用于项目开发了。
这里有一个问题:
框架中的用户信息很少。如果我想附加更多的用户信息到全局的类中去,你认为最好的办法是什么呢?
是直接扩充你的auth_user表,还是另外写一张表来存储我需要的附加信息呢?

(另外:是否方便msn交流?我的msn:hebiziyu88@hotmail.com)

Jun 5, 2010 at 3:04 PM
在 HTB.DevFx.Config.DotNetConfig这个命名空间中有一个SectionBaseHandler类,类中有一个方法 /// <summary> /// 读取配置文件中的 XML /// </summary> /// <param name="reader">在配置文件中进行读取操作的 <seealso cref="XmlReader"/></param> /// <param name="serializeCollectionKey">为 <c>true</c>,则只序列化集合的键属性;否则为 <c>false</c></param> protected override void DeserializeElement(XmlReader reader, bool serializeCollectionKey) { FieldInfo field = reader.GetType().GetField("_rawXml", FieldMemberInfo.FieldBindingFlags); this.outerXml = (string)field.GetValue(reader); base.DeserializeElement(reader, serializeCollectionKey); } 在这一句中FieldInfo field = reader.GetType().GetField("_rawXml", FieldMemberInfo.FieldBindingFlags);的_rawXml是什么意思