Code Comments
Programming Forum and web based access to our favorite programming groups.I'm trying to get a control from metabuilders.com dual list)to work under
ASP.NET 2.0. It worked find under 1.1 and then when i migrated my
application to 2.0 I ran into problems with it.
However, I'm getting an error on a particular line as follows:
Exception: System.Web.HttpUnhandledException: Exception of type
'System.Web.HttpUnhandledException' was thrown. --->
System.ArgumentException: Object of type 'System.String' cannot be converted
to type 'System.Web.VirtualPath'.
at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo
culture, BindingFlags invokeAttr)
at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder
binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags
invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean
skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags
invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at MetaBuilders.WebControls.DynamicListBoxResourceHandler.DetermineIsRegiste
re
d()
at MetaBuilders.WebControls.DynamicListBoxResourceHandler.get_IsRegistered()
at
MetaBuilders.WebControls.DynamicListBoxResourceHandler.RegisterScript(Page
page, String scriptKey, String scriptFile)
at MetaBuilders.WebControls.DualList.RegisterScriptLibrary()
at MetaBuilders.WebControls.DualList.RegisterScript()
at MetaBuilders.WebControls.DualList.OnPreRender(EventArgs e)
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Page.ProcessRequestMain(Boolean
includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
The function where the error occurs is below and the line causing the error
reads "Object handler = findMapping.Invoke..."
I'm a bit lost because I'm having trouble understanding exactly what this
function does and why all of sudden it does not work under 2.0 but works fin
e
under 1.1.
Any ideas or suggestions? I'm also at the point of throwning the thing
completely out and creating my own. The metabuilders site seems to be
basically dead for the past year so I'm out of luck getting help there.
private static Boolean DetermineIsRegistered() {
Object handlerMap =
System.Web.HttpContext.GetAppConfig("system.web/httpHandlers");
if ( handlerMap == null ) {
return false;
}
MethodInfo findMapping = handlerMap.GetType().GetMethod("FindMapping",
BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic );
if ( findMapping == null ) {
return false;
}
Object handler = findMapping.Invoke(handlerMap, new Object[] { "GET",
handlerName } );
if ( handler == null ) {
return false;
}
PropertyInfo handlerPathProperty = handler.GetType().GetProperty("Path",
BindingFlags.NonPublic | BindingFlags.Instance );
if ( handlerPathProperty == null ) {
return false;
}
String handlerPath = handlerPathProperty.GetValue(handler,null) as String;
if ( handlerPath == null || handlerPath != handlerName ) {
return false;
}
return true;
}
Post Follow-up to this messageHi, We have reviewed this issue and are currently researching on it. We will update you ASAP. Thanks for your patience! Kevin Yu ======= "This posting is provided "AS IS" with no warranties, and confers no rights."
Post Follow-up to this messageHello Robert, Welcome to ASPNET newsgroup. From your description, you're using a certain 3rd party webcontrol in your asp.net applicaiton, it works well in ASP.NET 1.1 and after upgrate to the asp.net 2.0 ,it no longer work and throw some parameter converting error , yes? Based on the exception message and call stack you provided, seems that webcontrol is using the HttpContext.GetAppConfig method to retrieve web.config's configuration info in your certain web control. And based on my research the HttpContext.GetAppConfig method return an object instance (of a internal class type), so this method is not designed for external use(mainly used by asp.net runtime internally), also in asp.net 2.0 this method has been marked as obsolete. So the problem must be caused by some internal implementation of the method and its return type has been changed. And from MSDN documenation , we can find that in ASP.NET 2.0, we're suggested to use the System.Web.Configuration.WebConfigurationManager.GetWebApplicationSection instead of the HttpContext.GetAppConfig since the .net framework 2.0 has provided much more powerful interfaces to retrieve application configuration data...... So as for your scenario, the webcontrol is developed by 3rd party, I'm afraid we have to contact the 3rd party to see whether they've provided new version which has used the new interfaces which can work correctly in ASP.NET 2.0. Thanks, Steven Cheng Microsoft Online Support Get Secure! www.microsoft.com/security (This posting is provided "AS IS", with no warranties, and confers no rights.) -------------------- | Thread-Topic: Object of type 'System.String' cannot be converted to type 'System | thread-index: AcXsieY8VZqgYbrQTKSV+fK7fieRiQ== | X-WBNR-Posting-Host: 67.180.214.235 | From: examnotes <robertv@noemail.nospam> | Subject: Object of type 'System.String' cannot be converted to type 'System | Date: Fri, 18 Nov 2005 13:49:06 -0800 | Lines: 78 | Message-ID: <01F487D4-95BA-4BB8-BDFB-5574015111C0@microsoft.com> | MIME-Version: 1.0 | Content-Type: text/plain; | charset="Utf-8" | Content-Transfer-Encoding: 7bit | X-Newsreader: Microsoft CDO for Windows 2000 | Content-Class: urn:content-classes:message | Importance: normal | Priority: normal | X-MimeOLE: Produced By Microsoft MimeOLE V6.00.3790.0 | Newsgroups: microsoft.public.dotnet.framework.aspnet.buildingcontrols | NNTP-Posting-Host: TK2MSFTNGXA03.phx.gbl 10.40.2.250 | Path: TK2MSFTNGXA02.phx.gbl!TK2MSFTNGXA01.phx.gbl!TK2MSFTNGXA03.phx.gbl | Xref: TK2MSFTNGXA02.phx.gbl microsoft.public.dotnet.framework.aspnet.buildingcontrols:14007 | X-Tomcat-NG: microsoft.public.dotnet.framework.aspnet.buildingcontrols | | I'm trying to get a control from metabuilders.com dual list)to work under | ASP.NET 2.0. It worked find under 1.1 and then when i migrated my | application to 2.0 I ran into problems with it. | | However, I'm getting an error on a particular line as follows: | | Exception: System.Web.HttpUnhandledException: Exception of type | 'System.Web.HttpUnhandledException' was thrown. ---> | System.ArgumentException: Object of type 'System.String' cannot be converted | to type 'System.Web.VirtualPath'. | at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo | culture, BindingFlags invokeAttr) | at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder | binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) | at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags | invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean | skipVisibilityChecks) | at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags | invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) | at MetaBuilders.WebControls.DynamicListBoxResourceHandler.DetermineIsRegistere | d() | at MetaBuilders.WebControls.DynamicListBoxResourceHandler.get_IsRegistered() | at | MetaBuilders.WebControls.DynamicListBoxResourceHandler.RegisterScript(Page | page, String scriptKey, String scriptFile) | at MetaBuilders.WebControls.DualList.RegisterScriptLibrary() | at MetaBuilders.WebControls.DualList.RegisterScript() | at MetaBuilders.WebControls.DualList.OnPreRender(EventArgs e) | at System.Web.UI.Control.PreRenderRecursiveInternal() | at System.Web.UI.Control.PreRenderRecursiveInternal() | at System.Web.UI.Control.PreRenderRecursiveInternal() | at System.Web.UI.Page.ProcessRequestMain(Boolean | includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) | | | The function where the error occurs is below and the line causing the error | reads "Object handler = findMapping.Invoke..." | | I'm a bit lost because I'm having trouble understanding exactly what this | function does and why all of sudden it does not work under 2.0 but works fine | under 1.1. | | Any ideas or suggestions? I'm also at the point of throwning the thing | completely out and creating my own. The metabuilders site seems to be | basically dead for the past year so I'm out of luck getting help there. | | private static Boolean DetermineIsRegistered() { | Object handlerMap = | System.Web.HttpContext.GetAppConfig("system.web/httpHandlers"); | if ( handlerMap == null ) { | return false; | } | | MethodInfo findMapping = handlerMap.GetType().GetMethod("FindMapping", | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic ); | if ( findMapping == null ) { | return false; | } | | Object handler = findMapping.Invoke(handlerMap, new Object[] { "GET", | handlerName } ); | if ( handler == null ) { | return false; | } | | PropertyInfo handlerPathProperty = handler.GetType().GetProperty("Path", | BindingFlags.NonPublic | BindingFlags.Instance ); | if ( handlerPathProperty == null ) { | return false; | } | | String handlerPath = handlerPathProperty.GetValue(handler,null) as String; | if ( handlerPath == null || handlerPath != handlerName ) { | return false; | } | | return true; | } |
Post Follow-up to this messageHi Robert, I just came across your post as I was looking for a solution for the same ex act issue using metabuilder's DualList in .Net 2.0. I know it's a bit late since you posted this months ago but I have a solution to it that seems to b e working. Let me know if you're still interested and I'll post the changes to sourcecode provided with the control that got it working for me (was onl y 2 lines that had to change). Thanks, Alexquote:
Originally posted by Robert I'm trying to get a control from metabuilders.com dual list)to work under ASP.NET 2.0. It worked find under 1.1 and then when i migrated my application to 2.0 I ran into problems with it. However, I'm getting an error on a particular line as follows: Exception: System.Web.HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.ArgumentException: Object of type 'System.String' cannot be converted to type 'System.Web.VirtualPath'. at System.RuntimeType.CheckValue(Object value, Binder binder, CultureInfo culture, BindingFlags invokeAttr) at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at MetaBuilders.WebControls.DynamicListBoxResourceHandler.DetermineIsRegiste re d() at MetaBuilders.WebControls.DynamicListBoxResourceHandler.get_IsRegistered() at MetaBuilders.WebControls.DynamicListBoxResourceHandler.RegisterScript(Page page, String scriptKey, String scriptFile) at MetaBuilders.WebControls.DualList.RegisterScriptLibrary() at MetaBuilders.WebControls.DualList.RegisterScript() at MetaBuilders.WebControls.DualList.OnPreRender(EventArgs e) at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Control.PreRenderRecursiveInternal() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) The function where the error occurs is below and the line causing the error reads "Object handler = findMapping.Invoke..." I'm a bit lost because I'm having trouble understanding exactly what this function does and why all of sudden it does not work under 2.0 but works fin e under 1.1. Any ideas or suggestions? I'm also at the point of throwning the thing completely out and creating my own. The metabuilders site seems to be basically dead for the past year so I'm out of luck getting help there. private static Boolean DetermineIsRegistered() { Object handlerMap = System.Web.HttpContext.GetAppConfig("system.web/httpHandlers"); if ( handlerMap == null ) { return false; } MethodInfo findMapping = handlerMap.GetType().GetMethod("FindMapping", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic ); if ( findMapping == null ) { return false; } Object handler = findMapping.Invoke(handlerMap, new Object[] { "GET", handlerName } ); if ( handler == null ) { return false; } PropertyInfo handlerPathProperty = handler.GetType().GetProperty("Path", BindingFlags.NonPublic | BindingFlags.Instance ); if ( handlerPathProperty == null ) { return false; } String handlerPath = handlerPathProperty.GetValue(handler,null) as String; if ( handlerPath == null || handlerPath != handlerName ) { return false; } return true; }
Post Follow-up to this messagealcsharp =E5=AF=AB=E9=81=93=EF=BC=9A > Hi Robert, > I just came across your post as I was looking for a solution for the > same exact issue using metabuilder's DualList in .Net 2.0. I know it's > a bit late since you posted this months ago but I have a solution to it > that seems to be working. Let me know if you're still interested and > I'll post the changes to sourcecode provided with the control that got > it working for me (was only 2 lines that had to change). > Thanks, > Alex yea ~ I'd like to know , please send me a copy :D Miz
Post Follow-up to this messageOk.. sorry didn't post code orginally but I was on another workstation than
the one that had the code.
In DynamicListBoxResourceHandler.cs...
Change the line that reads: (line 101 in my code)
Object handlerMap = System.Web.HttpContext.GetAppConfig("system.web/httpHand
lers");
TO
Object handlerMap = System.Web.HttpContext.GetAppConfig("httpHandlers");
----------------------------------------------
Then in DynamicListBox.js...
Change line that reads: (line 25 in my code)
list.Tracker = DynamicListBox_FindControl( list.name + ":itemTracker" );
TO
list.Tracker = DynamicListBox_FindControl( list.name + "$itemTracker" );
That's it. That seemed to do it for me.
Post Follow-up to this messageI did as per your saying .. now i get a Dll file. but when i put the dll fil e in the bin directory i get the following error Value cannot be null,Parameter name:stream Please let me know the reason for the same. Thanks and Regards Biju
Post Follow-up to this messageI'm trying to do the same conversion, but I cannot even finish the build. Th e error I'm receiving while building is:quote:Alcsharp, is it an idea to maybe return your ASP.Net conversion to Andy Smit h? Otherwise I'd like to hear from you as well :) Regards, Robert (another one)
Cryptographic failure while signing assembly The key container name 'metabuilders.com' does not exist'
Post Follow-up to this messageI really liked this control and ran into the same issues with ASP.net 2.0. I summerized some fixes I found and posted to my blog: http://www.pressingtheredbutton.com...lders_duallist/
Post Follow-up to this messageJim's changes did help, but the troublesome "Object of type 'System.String'
cannot be converted
to type 'System.Web.VirtualPath'" still exists after these changes in Dot Ne
t v2.0.
After debugging the code in detail, I realized that this is due to the use o
f undocumented functions in the 'DetermineIsRegistered'. I am referring to t
he use of 'FindMapping' which is not documented anywhere in MSDN and which i
s resulting on this error. Getting rid of this error requires a simple rewri
te of this function as follows
private static Boolean DetermineIsRegistered()
{
HttpHandlersSection handlerMap = WebConfigurationManager.GetWebApplica
tionSection("system.web/httpHandlers")as HttpHandlersSection;
if (handlerMap == null)
return false;
foreach (HttpHandlerAction handler in handlerMap.Handlers)
{
if (handler.Path == handlerName)
{
return true;
}
}
return false;
}
Hope this helps and let me know if it doesn't.
Abhijit Talukdar
Post Follow-up to this message
Show a Printable Version
Email This Page to Someone!
Receive updates to this thread
Powered by vBulletin
Copyright 2000-2006 Jelsoft Enterprises Limited.