asp.net visual basic "external function"
I'm converting some Foxweb stuff to asp.net. Starting with what I hope are some simple things to learn the techniques and will work on the harder problems later.
I have a case where I'm trying to use a function that is declared in another file. I anticipate this will be a common thing to do as it would probably not be put in a separate file unless it were used b开发者_运维知识库y (called in) separate files.
In my aspx file I have a line that looks like this:
Response.Write ( Globals.html_thingie("My Title") )
In another file I have written a class that looks something like this:
Public Class Globals
Public Shared Function html_thingie(ByVal title As String)
Dim str As String
str = "<head>" & title & "</head>" & vbCrLf
Return str
End Function
End Class
When I build the class (in Visual Studio) it gives no errors or warnings and creates a dll file called ClassLibrary1.dll which I copy to the same directory as the aspx file. I don't know why it uses the name "ClassLibrary1" as I changed the solution name to "Globals" to match the class name and changed what I "think" is the project name to "clsGlobals". In any case, I copied the dll to the same directory where the server keeps the aspx file. When I invoke the aspx from the web page, it fails. It will not tell me the error message for security reasons, but I suspect that there is something fundamental that I'm missing here.
Ideas?
The dll should go in the /bin
directory, one down from where the aspx page is.
Also, the name of the project doesn't necessarily correspond to the name of the assembly. If you right-click the project and go to properties, you can change the assembly name.
Thirdly, (and not directly related to the issue at hand, but good to know nonetheless), the solution name and the class name have nothing to do with one another. In fact, the solution has nothing to do with the actual output of the build; it is strictly to help you organize projects (which become assemblies) logically while developing.
First, you need to put the .dll files in a subdirectory of your web site called bin/. Next, you need to turn on remote errors in the web.config. Put this under <system.web>
:
<customErrors mode="Off"/>
and then you'll be able to see the specific error that's being generated.
Here's what I had to do.
Putting a customErrors tag in system.web was extremely helpful. (thanks, dahrnsbrak)
It does not like the term "Globals", so I changed the name to clsCommon.
Changing the assembly name was handy. (thanks again, mark)
The system doesn't care about (or apparently even use) the dll. I compile only to check for errors.
It does use the vb file. So I copied clsCommon.vb to the same directory as my aspx file.
There were a number of things I had to do inside the class file. Here's a shorted, but final version of it.
Option Explicit On Option Strict On Imports System Imports System.Web.UI Imports System.Web.UI.Page Public Class clsCommon Inherits Page Public Shared Function html_thingie(ByVal title As String) As String Dim str As String str = "<head>" & title & "</head>" & System.Environment.NewLine Return str End Function End Class
I had to do the following in the aspx file to invoke this function.
a. at the top of the file I added:
<%@ page inherits="clsCommon" src="clsCommon.vb" %>
b. The specific line to invoke the function was:
<%
Response.Write ( clsCommon.html_thingie("Register for Course") )
%>
- In addition to your responses, I found the following page helpful:
https://web.archive.org/web/20210324190142/http://www.4guysfromrolla.com/webtech/chapters/ASPNETUnleashed/ch06.3.shtml
精彩评论