Asp.Netマザーボードでのパスの問題


多くの友人がマザーボードやコントロールを使用しているとき、同じ問題に直面しているのは、複数の異なるディレクトリの下のページに参照されている共通の領域で、相対的なパスの問題だと思います.
まず、次の簡単なコードを見てみましょう.
Default.マスターマザーボードはルートディレクトリにあります.
 

  
  
  
  
  1. <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Default.master.cs" Inherits="MyWebservice.Default" %> 
  2.  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
  4.  
  5. <html xmlns="http://www.w3.org/1999/xhtml" > 
  6. <head runat="server"> 
  7.     <title> </title> 
  8.     <script type="text/javascript" src="js/jquery.js"></script> 
  9.     <script type="text/javascript"> 
  10.     $(document).ready(function(){ 
  11.         alert("jQuery.") 
  12.     }); 
  13.     </script> 
  14.     <asp:ContentPlaceHolder ID="head" runat="server"> 
  15.     </asp:ContentPlaceHolder> 
  16. </head> 
  17. <body> 
  18.     <form id="form1" runat="server"> 
  19.     <div> 
  20.         <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> 
  21.          
  22.         </asp:ContentPlaceHolder> 
  23.     </div> 
  24.     </form> 
  25. </body> 
  26. </html> 

マザーボードと同じディレクトリのページindex.aspx:
 

  
  
  
  
  1. <%@ Page Language="C#" MasterPageFile="~/Default.Master" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="MyWebservice.index" Title=" " %> 
  2. <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
  3. </asp:Content> 
  4. <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
  5. </asp:Content> 

index.aspxページではjs/jqueryを見つけることができます.jsファイル.
しかし次のOAディレクトリの下のoa.aspx:
 

  
  
  
  
  1. <%@ Page Language="C#" MasterPageFile="~/Default.Master" AutoEventWireup="true" CodeBehind="oa.aspx.cs" Inherits="MyWebservice.oa.oa" Title=" " %> 
  2. <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 
  3. </asp:Content> 
  4. <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
  5. </asp:Content> 

OA/の下にあるので../js/jquery.jsしかし、どのようにこの2つの状況を両立させることができますか?実際にはネストレベルがもっと多いかもしれません.
もちろん、絶対urlを用いる/js/jqueryを用いることも考えられる.jsですが、この方法の問題は「仮想ディレクトリ」の問題で、チーム開発はそれぞれの仮想ディレクトリが異なると、お互いに毎回修正することはできないでしょう.あまり柔軟ではありません.
柔軟性は次のようなダイナミックな方法です.
">
生成されたコードを表示するには、絶対url方式です.
<script type="text/javascript" src="/pathtest/js/jquery.js">
        pathtest.
   
<script type="text/javascript" src=\'#\'" /js/jquery.js") 
%>"></script>

      ,        ,  masterpage/    ,      ,       2 ,   
   master     :
  
<%@ Page Language="C#" MasterPageFile="~/Default.Master" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="MyWebservice.index" Title="  " %>

        ,    :
<%@ Page Language="C#" MasterPageFile="masterpage/Default.Master" AutoEventWireup="true" CodeBehind="index.aspx.cs" Inherits="MyWebservice.index" Title="  " %>

または絶対(アイテムの絶対位置に注意してね)
<%@Page Language="C#"MasterPageFile="~/masterpage/Default.Master"AutoEventWireup="true"CodeBehind="index.aspx.cs"Inherits="MyWebservice.index"Title="トップページ"%>
これはindexです.aspxの.
2つ目はjqueryですjsのパス、
次のように
<%=ResolveUrl("../js/jquery.js") %>">
または絶対的
<%=ResolveUrl("~/js/jquery.js") %>">
<%>>の中の一般的なのはプロジェクトパス(絶対帯~)であることがわかります.
またOA/oa.aspxとindex.aspxの違いは、マザーボードを導入する場所です.
<%@Page Language="C#"MasterPageFile="~/masterpage/Default.Master"AutoEventWireup="true"CodeBehind="oa.aspx.cs"Inherits="MyWebservice.oa.oa.oa"Title="オンラインオフィス"%>
あるいは相対的に(この注意はindex.aspxとの違いですよ)
<%@Page Language="C#"MasterPageFile="../masterpage/Default.Master"AutoEventWireup="true"CodeBehind="oa.aspx.cs"Inherits="MyWebservice.oa.oa."Title="オンラインオフィス"%>
 
2.よし上のページ生成時は絶対URL、

<script type="text/javascript" src="/pathtest/js/jquery.js"></script>

では相対URLですね.
Pageを使用します.ResolveClientUrl()メソッドですね、
注意OA/oa.aspx:

<script type="text/javascript" src="../js/jquery.js"></script>
 index.aspx   :
<script type="text/javascript" src="js/jquery.js"></script>


    ,     

  asp.net    http://xcf007.blog.51cto.com/471707/344259