How to share VB code across multiple pages?

A

antonyliu2002

I am new to .NET framework.

A bunch of web pages of mine need the same function. Right now, I put
the Subs in each individual page.

I think there must be a way to save my Subs in a separate file and then
have each web page link to it. Could you guys please let me know how
to do this? Thanks a lot!
 
D

darrel

A bunch of web pages of mine need the same function. Right now, I put
the Subs in each individual page.

I think there must be a way to save my Subs in a separate file and then
have each web page link to it. Could you guys please let me know how
to do this? Thanks a lot!

There are a variety of ways. One way is to just make a new class file (a .vb
or .cs file) and then reference the function that way.

I typically make a new class file called sharedFunctions and then put
specific functions within it. I can then reference them from any file in the
project: sharedFunctions.myFunction()

-Darrel
 
K

Kevin Spencer

I think there must be a way to save my Subs in a separate file and then
have each web page link to it. Could you guys please let me know how
to do this? Thanks a lot!

ASP.Net is fully-compiled and object-oriented. So, one of the first things
you need to do as a new ASP.Net programmer is to retrain your thinking.
There are no pages in an ASP.Net application. There are only classes. A
System.Web.UI.Page is a class, and that template you create is just part of
the class definition.

So, you don't ever define Subs in files. They are methods in classes.

Now, the reason I'm sayiing this is that you need to create a class that
contains your common Subs, and use that in all of your Page classes. It
doesn't have direct access to the HttpContext that is passed to a page, but
remember that it will be used BY a Page, which does have the HttpContext.
And you can reference it in your class thusly:

' Using Request as a part of the HttpContext
Public Sub DoSomething()
Dim Request As HttpRequest = CType(HttpContext.Current.Handler,
System.Web.UI.Page).Request
If Request.QueryString("SomeParameter") = "foo" Then
'Do Something
End If
End Sub

It will really help you to reflect on the Object-oriented nature of .Net, in
order to leverage it to its fullest extent.

HTH,

Kevin Spencer
Microsoft MVP
..Net Developer
Big things are made up of
lots of little things.
 
A

antonyliu2002

Hi, Thx.

After I got your reply, then I created a file called "MyClass.vb" in
the same folder of the webpages.

MyClass.vb has a Class like this:

Public Class MyClass
Public Sub MySub()
Do Something
End Sub
End Class

I called the MySub like this in my webpage:

Call MyClass.MySub()

This is the compile error:

BC30456: 'MySub' is not a member of 'ASP.Page1_aspx'.

Apparently I did not do it in the right way. I think I am doing it
like Java. I was a Java programmer.

Shouldn't I tell Page1.aspx where to find that function?
 
A

antonyliu2002

Thanks, Kevin, I was a Java programmer. So I think that I know a little
bit about OO programming. It is a new thing to me that .Net framwork
does not have a page. Because of this, I am kinda confused by the
sample code your provided.
 
J

Juan T. Llibre

If you're using ASP.NET 2.0, place MyClass.vb
in the App_Code folder. You'll be able to access it there.

If you're using ASP.NET 1.1, you should command-line compile
MyClass.vb to MyClass.dll and place it in the /bin drectory.

You, then, can import the namespace in your aspx file with :
<%@ Import Namespace="YourNameSpaceName" %>
and instantiate your classes from any aspx page.
 
A

antonyliu2002

Hi, Juan,

Yes, I am using ASP.NET 1.1. I tried compiling MyClass.vb using
vbc.exe, but got an error message as follows:

"The application has failed to start because MSVCR71.dll was not
found.Reinstalling this application may fix this problem"

But MSVCR71.dll is actually right there under the folder
Windows\Microsoft.NET\Framework\v1.1.4322. How to fix this please?

By the way, how to get ASP.NET 2.0? Is it freely upgradable?
 
J

Juan T. Llibre

re:
I tried compiling MyClass.vb using vbc.exe, but got an error message

Was your compilation attempt made from a directory
included in your system's environment path ?

It could also be that you have a failed .Net Framework install.
Uninstalling and reinstalling the .Net framework would help in that case.

re:
how to get ASP.NET 2.0? Is it freely upgradable?

If you are an MSDN subscriber,you can download the RC at :
http://lab.msdn.microsoft.com/vs2005/get/default.aspx

Otherwise, you can download the public 2.0 Beta versions here :
http://lab.msdn.microsoft.com/vs2005/get/default.aspx

Also, there's a download which includes the
Beta 2 Visual Web Developer version at :

http://lab.msdn.microsoft.com/express/vwd/default.aspx





Hi, Juan,

Yes, I am using ASP.NET 1.1. I tried compiling MyClass.vb using
vbc.exe, but got an error message as follows:

"The application has failed to start because MSVCR71.dll was not
found.Reinstalling this application may fix this problem"

But MSVCR71.dll is actually right there under the folder
Windows\Microsoft.NET\Framework\v1.1.4322. How to fix this please?

By the way, how to get ASP.NET 2.0? Is it freely upgradable?
 
A

antonyliu2002

Hi, Juan,

Yes, I've set the PATH variable. But I am still getting that error
message.

That said, I have downloaded and installed the ASP.20 Visual Web
Developer kit and issued aspnet_regiis.exe -i.

Now, when I check out my web application, I get this error message:

******************************************
Server Error in '/' Application.
Validation of viewstate MAC failed. If this application is hosted by a
Web Farm or cluster, ensure that <machineKey> configuration specifies
the same validationKey and validation algorithm. AutoGenerate cannot be
used in a cluster.
Description: An unhandled exception occurred during the execution of
the current web request. Please review the stack trace for more
information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: Validation of viewstate
MAC failed. If this application is hosted by a Web Farm or cluster,
ensure that <machineKey> configuration specifies the same validationKey
and validation algorithm. AutoGenerate cannot be used in a cluster.

Source Error:

An unhandled exception was generated during the execution of the
current web request. Information regarding the origin and location of
the exception can be identified using the exception stack trace below.
******************************************
 
J

Juan T. Llibre

re:
That said, I have downloaded and installed the ASP.20
Visual Web Developer kit and issued aspnet_regiis.exe -i.

From which .Net Framework directory ?

From the 1.1 .Net Framework dir, or from the 2.0 directory ?

Also, did you change your application's directory so it runs
the 2.0 ASP.NET version, or is it still running the 1.1 version ?

If the ASP.NET tab is available in the IIS Manager, change
the target .Net Framework version to the appropiate one.

If it's not available, download Denis Bauer's ASP.NET Version Switcher
and change the ASP.NET version for you app withj that :

http://www.denisbauer.com/NETTools/ASPNETVersionSwitcher.aspx

Remember that now that you're running two versions of ASP.NET that,
at least, all 1.1 apps will need to be in one AppPool and all 2.0 apps
will need to be in a different AppPool.





Hi, Juan,

Yes, I've set the PATH variable. But I am still getting that error
message.

That said, I have downloaded and installed the ASP.20 Visual Web
Developer kit and issued aspnet_regiis.exe -i.

Now, when I check out my web application, I get this error message:

******************************************
Server Error in '/' Application.
Validation of viewstate MAC failed. If this application is hosted by a
Web Farm or cluster, ensure that <machineKey> configuration specifies
the same validationKey and validation algorithm. AutoGenerate cannot be
used in a cluster.
Description: An unhandled exception occurred during the execution of
the current web request. Please review the stack trace for more
information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: Validation of viewstate
MAC failed. If this application is hosted by a Web Farm or cluster,
ensure that <machineKey> configuration specifies the same validationKey
and validation algorithm. AutoGenerate cannot be used in a cluster.

Source Error:

An unhandled exception was generated during the execution of the
current web request. Information regarding the origin and location of
the exception can be identified using the exception stack trace below.
******************************************
 
A

antonyliu2002

Juan said:
re:

From which .Net Framework directory ?
From the 1.1 .Net Framework dir, or from the 2.0 directory ?

I issued the aspnet_regiis.exe -i from the v2.0.50215 folder.
Also, did you change your application's directory so it runs
the 2.0 ASP.NET version, or is it still running the 1.1 version ?

No, I did not. Do you mean that applications for ASP.NET 2.0 must
reside in a directory different from those of ASP.NET 1.1?
If the ASP.NET tab is available in the IIS Manager, change
the target .Net Framework version to the appropiate one.

Yes, the tabs are visible. Both v1.1.4322 and v2.0.50215 are
"Allowed". Do you mean that I should "prohibit" v1.1.4322?
 
J

Juan T. Llibre

re:
No, I did not. Do you mean that applications for ASP.NET 2.0
must reside in a directory different from those of ASP.NET 1.1?

You can't have the same application running under both
1.1 and 2.0 in the same physical, or virtual, directory.

Also, they must run in a different Application Pool.

re:
Yes, the tabs are visible. Both v1.1.4322 and v2.0.50215 are
"Allowed". Do you mean that I should "prohibit" v1.1.4322?

No.

Only that your 1.1 apps must run in a different AppPool than 2.0's.



Juan said:
re:

From which .Net Framework directory ?
From the 1.1 .Net Framework dir, or from the 2.0 directory ?

I issued the aspnet_regiis.exe -i from the v2.0.50215 folder.
Also, did you change your application's directory so it runs
the 2.0 ASP.NET version, or is it still running the 1.1 version ?

No, I did not. Do you mean that applications for ASP.NET 2.0 must
reside in a directory different from those of ASP.NET 1.1?
If the ASP.NET tab is available in the IIS Manager, change
the target .Net Framework version to the appropiate one.

Yes, the tabs are visible. Both v1.1.4322 and v2.0.50215 are
"Allowed". Do you mean that I should "prohibit" v1.1.4322?
 
A

antonyliu2002

Juan said:
re:

You can't have the same application running under both
1.1 and 2.0 in the same physical, or virtual, directory.

Also, they must run in a different Application Pool.

I don't have a concept of Application Pool. So, will my 1.1
application run well with ASP.NET 2.0?

Also, will the problem be resolved if I disable 1.1.4322? It did not,
I tried.
 
A

antonyliu2002

Hi, Juan,

Thank you very much. I think I need more time for ASP.NET 2.0.

I have uninstalled the 2.0 version and will stay with 1.1 for now. The
vbc compiler worked when I compiled the source under the v1.1.4322
folder where the msvcr71.dll resides.

But then I have a VB code problem:

******************************************
vbc : error BC30420: 'Sub Main' was not found in 'MyClass'.
f:\inetpub\wwwroot\test\MyClass.vb(1) : error BC30183: Keyword is not
valid as an identifier.

Public Class MyClass
~~~~~~~
******************************************

I am new to VB. I am a Java man. Does this mean that each VB class
must have a Sub Main? This sounds weird. Also, why isn't MyClass a
valid identifier?
 
J

Juan T. Llibre

Hi, Antony.

re:
But then I have a VB code problem:
vbc : error BC30420: 'Sub Main' was not found in 'MyClass'.
f:\inetpub\wwwroot\test\MyClass.vb(1) : error BC30183:
Keyword is not valid as an identifier. Public Class MyClass
Does this mean that each VB class must have a Sub Main?

Are you creating a Windows Forms application ( instead of a web aplication ) ?

You don't need "Sub Main" in web applications...




Hi, Juan,

Thank you very much. I think I need more time for ASP.NET 2.0.

I have uninstalled the 2.0 version and will stay with 1.1 for now. The
vbc compiler worked when I compiled the source under the v1.1.4322
folder where the msvcr71.dll resides.

But then I have a VB code problem:

******************************************
vbc : error BC30420: 'Sub Main' was not found in 'MyClass'.
f:\inetpub\wwwroot\test\MyClass.vb(1) : error BC30183: Keyword is not
valid as an identifier.

Public Class MyClass
~~~~~~~
******************************************

I am new to VB. I am a Java man. Does this mean that each VB class
must have a Sub Main? This sounds weird. Also, why isn't MyClass a
valid identifier?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,768
Messages
2,569,574
Members
45,049
Latest member
Allen00Reed

Latest Threads

Top