在同一个asp.net MVC2项目(当它是纯ASP.NET项目时没问题),我在App_Code中创建了2个没有命名空间的类,一个是普通类,另一个是是静态的。
我可以从任何地方访问实例类的公共方法,我无法访问静态类的公共方法。为什么?那我怎么才能访问它们呢?
public class MyWebservice
{
public stMyWebservice()
{
}
public String getText() {
}
}
public static class Helper
{
public static String getText()
{
}
}
我像这样访问index.aspx中的静态类:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
Helper.getText();
}
</script>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Home Page
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2><%: ViewData["Message"] %></h2>
<p>
To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>
</asp:Content>
答案 0 :(得分:7)
您的静态类应该可以作为另一个类访问。我的猜测是你声明了没有public
访问修饰符的静态类,例如:
static class MyClass
{
}
如果您以这种方式声明了该类,它将具有internal
访问修饰符。这意味着,它将在组装中可访问。 App_Code文件夹编译成一个程序集,如果你试图在App_Code文件夹之外使用你的类,你将收到一个错误。
编辑:还有一个 - 在这种情况下,该类是否声明为static
没有区别。如果类具有相同的访问修饰符,则每个类都可以在第二个类的位置访问。
因此,由于您提供的不是确切的类声明,我的第二个猜测是:您已将静态类声明为非静态类,例如:
public class MyWebservice
{
public static class Helper
{
public static String getText()
{
}
}
}
在这种情况下,静态类也可以通过父类名访问:
var text = MyWebservice.Helper.getText()
最后,我创建了一个简单的网站来演示并将其发布到google docs。
编辑II:您的上次编辑显示您实际上有一个 Web应用程序,而不是一个网站。对于Web应用程序App_Code
文件夹不是必需的。在网站中,类文件在运行时动态编译,并且必须位于App_Code
文件夹中。在Web应用程序中,所有内容都是静态编译的,类文件可以存在于Web应用程序的任何位置。
在这种情况下,我在文件夹中的代码文件的错误Build Action
中看到了此行为的原因。我猜它设置为Content
但应该设置为Compile
(您可以通过在代码文件上按F4
来实现)。
答案 1 :(得分:7)
确保该课程的构建操作设置为编译。
转到 App_Code 文件夹,然后选择您的课程。查看属性页面。查找构建操作。将其设置为编译。然后,您应该可以在应用程序的其他位置访问该对象的方法和属性。