2011-03-23 59 views
0

在同一個asp.net MVC2項目(當它是一個純ASP.NET項目時沒有問題),我在App_Code中創建了2個類,沒有名稱空間,一個是普通類,另一個是靜態類。爲什麼我可以在App_Code中爲ASP.NET項目訪問靜態類方法,而不是爲MVC2項目?

我可以從任何地方訪問實例類的公共方法,我無法訪問靜態類的公共方法。爲什麼?那我怎樣才能訪問它們呢?

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

你能發佈你的類聲明嗎? – Alex 2011-03-23 18:22:31

+1

你究竟如何試圖訪問靜態類?請顯示您的代碼示例 – curtisk 2011-03-23 18:27:26

+0

請參閱我的更新,謝謝 – user310291 2011-03-24 11:56:40

回答

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來實現)。

+0

好吧我發現它可以在你的asp.net項目中工作我下載了感謝,它不在我的這是一個asp.net mvc2項目怪異的不是嗎? – user310291 2011-03-24 16:11:06

+0

對不起,我是asp.net的新手,當然也是mvc我不明白Build Action的意思。 F4與F6有什麼不同?如果在Web應用程序中,我可以將代碼放在任何地方,我可以在App_Code中放置代碼嗎? – user310291 2011-03-24 17:56:17

+0

有關信息,我使用visual studio中的常用模板創建了asp.net示例,並且只添加了與您的示例相同的東西。 – user310291 2011-03-24 17:57:28

6

確保該類的構建動作設置爲編譯

轉到您的App_Code文件夾,並選擇您的班級。查看屬性頁面。查找構建動作。將其設置爲編譯。然後,您應該可以訪問應用程序中其他位置的該對象的方法和屬性。

+0

給我的解決方案。 – pimbrouwers 2015-04-10 17:55:30

相關問題