2017-05-12 106 views
-1



所以這讓我瘋狂......
我在Visual Studio 2015的一個網站上工作(所以從開始頁面:File> New>網站...不是新建項目> Web> ASP.NET Web應用程序),當我使用VS作爲調試器/本地主機時,事情進展順利。
現在,謹慎起見,我想上傳該網站到一個www.mysite.com/sandbox/文件夾,我可以測試一些其他項目,如數據庫訪問等(因爲該網站是活的,我不'我想要替換它,直到我準備好了)。但由於某種原因,所有文件(通過本地主機工作正常)似乎指向「/」的母版頁和其他項目,而不是「/ sandbox /」...
有沒有什麼辦法可以告訴VS根不在它認爲的地方? 到目前爲止,我已經證實,這純粹是根源位置:我謹慎地創建了一個不同的項目(使用文件名,我可以在實時服務器上輕鬆找到&刪除),以查看服務器上是否有任何錯誤,但如果我將文件中的根保存爲與服務器上的根相同(換句話說,如果我將我的網站上傳到根目錄,那麼引用就可以),它們會正常加載。順便說一句,我以前在做過這些工作的時候,我直接在一個不活躍的網站的根級別工作,並且一切正常。
是否有任何方式(可能在web.config中)我可以告訴它,我在任何時候設置了MasterPageFile =「〜/ Master/masterPage.master」它實際上應該指向MasterPageFile =「〜/沙箱/ Master/masterPage.master「?我的印象是「〜」會照顧到這一點,但顯然不是? 基於谷歌搜索,我發現在Web應用程序(而不是網站)中有一種方法來定義「Web」部分,但該選項似乎並不適用於此...爲Visual Studio 2015設置網站根(〜)

任何幫助將不勝感激。
謝謝,
JoeE

編輯:

所以,我說這看起來像一個「文本的牆」(不管這可能意味着)... 讓我透露更多的細節與步驟舉個例子,或許有人可以給我正確的方向。

  1. 打開VS2015,轉到文件>新建> Web站點......從
    安裝選\ Tempates \ Visual Basic中\ ASP.NET空Web站點 - >確定
  2. 右鍵點擊項目解決方案下,並添加>母版頁,然後 編輯MasterPage.master有這樣的內容:

    <%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %> 
     
    
     
        <!DOCTYPE html> 
     
    
     
        <html xmlns="http://www.w3.org/1999/xhtml"> 
     
        <head runat="server"> 
     
         <title></title> 
     
         <asp:ContentPlaceHolder id="head" runat="server"> 
     
         </asp:ContentPlaceHolder> 
     
        </head> 
     
        <body> 
     
         <form id="form1" runat="server"> 
     
         <div> 
     
          <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> 
     
          Some Content from Master 
     
          </asp:ContentPlaceHolder> 
     
         </div> 
     
         </form> 
     
        </body> 
     
        </html>

  3. 添加> Web窗體(默認)和編輯其內容爲:

<%@ Page Language="VB" AutoEventWireup="false" MasterPageFile="~/MasterPage.master" CodeFile="Default.aspx.vb" Inherits="_Default" %> 
 

 
<asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server" > 
 
    <p>Some Data from Page</p> 
 
</asp:Content>

現在我的測試來看,它在這一點上與F5,我得到的是說,一個瀏覽器窗口「一些頁面數據」......如預期的那樣。

現在來的時間把它上傳到我的服務器(由1 & 1主持):

當我點擊發布,它需要我到Default.aspx頁面,但指出:

Parser Error 
    Description: An error occurred during the parsing of a resource required to service this request. Please review the following specific parse error details and modify your source file appropriately. 

Parser Error Message: The file '/MasterPage.master' does not exist. 

Source Error: 



Line 1: <%@ Page Language="VB" AutoEventWireup="false" MasterPageFile="~/MasterPage.master" CodeFile="Default.aspx.vb" Inherits="_Default" %> 
Line 2: 
Line 3: <asp:Content ContentPlaceHolderID="ContentPlaceHolder1" runat="server" > 

源文件:/沙/ siteTest /默認。 ASPX線:1個

我的問題是這樣的:我在哪裏需要告訴Visual Studio中的文件夾結構的確不包含一切下的「/沙箱/」文件夾中,而不是僅僅「/」?我知道我可以進入Default.aspx文件,並將語句更改爲MasterPageFile="~/sandbox/MasterPage.master",但是那裏有一個更好的方法...?我期待發布選項中的條目可以做到這一點,但它不會...或者,我嘗試以編程方式在PreInit事件期間更改此設置,但這並不奏效...

謝謝, Ĵ

+0

你可能要考慮重寫這個。在目前的形式中,這看起來像是一長串文字。 –

回答

0

好吧...我想我找到了解決辦法。也許只是一點觸動,但它適用於我所需要的,希望別人可能會覺得這很有用。 在嘗試了其他一些選項之後,爲我所需要的工作之一是保持結構不變,但是要使用子域進行測試。所以,現在我發佈到sandbox.example.com而非example.com/sandbox 服務器現在認爲這個「〜/」文件夾實際上是在那裏我點的子域。

感謝您的努力&反饋。

0

首先,確保你實際上在所有的應用程序根目錄相對URL的使用~/

其次,確保您的應用程序位於IIS應用程序範圍內 - 這是最重要的一步,因爲它告訴ASP.NET,/sandbox/(子目錄)是應用程序的根,而不是/(根你的網頁)。

在IIS管理器中,在左側的樹視圖中打開您的網站,並選擇代表應用程序根目錄的目錄(或虛擬目錄),右鍵單擊它並選擇「轉換爲應用程序」。

另外請確保您的應用程序的根目錄web.configbin目錄位於/sandbox/目錄中,而不是網站本身的根目錄。

+0

當我發佈該網站時,它會得到一個「解析器錯誤消息:文件'/ Master/MasterPage.master'不存在。」我已經檢查過,主頁面應該在哪裏。 – JoeEg

+0

關於IIS管理器...我沒有訪問權限。此外,我不想'將其轉換爲應用程序',這不是問題AFAIK ... web.config位於/ sandbox /文件夾中。 Web站點沒有/ bin(Web應用程序會有一個)... – JoeEg

+0

@JoeEg「轉換爲應用程序」與「ASP.NET Web應用程序」項目沒有任何關係。 「IIS應用程序」是IIS如何隔離網站的不同區域並在ASP.NET中設置「〜」系統。 – Dai