3

このアプリには、RouteConfig.cs で構成された複数のルートがあります。たとえば、次の 2 つのルートが定義されています。

routes.MapRoute(
  name: "MyPage-Demo",
  url: "pages/page-title/demo",
  defaults: new { controller = "Root", action = "PageDemo" }
);

routes.MapRoute(
  name: "MyPage",
  url: "pages/page-title/{resource}",
  defaults: new { controller = "Root", action = "Page", resource = UrlParameter.Optional }
);

誰かが訪問する各ページには、「デモ」へのリンクがあります。にアクセスすると、ページにアクセスできますhttp://localhost/pages/page-title。これはうまくいきます。

ユーザーが「デモ」リンクをクリックすると、 にあるページにリダイレクトされhttp://localhost/pages/page-title/demoます。これはうまくいきます。

私の問題は、デモ ページが複雑なネストされた構造を参照している可能性があることです。構造は JavaScript、css、画像などで構成されています。デモの目的で使用されるコンテンツ。これらのネストされたリソースは見つかりません。ただし、これらのネストされたファイルを考慮してルーティングをセットアップする方法がわかりません。

PageDemoコントローラーのアクションを更新する必要があると確信しています。しかし、よくわかりません

a) 異なる構造を許容する方法でそうする方法

b)これらのネストされた構造を考慮してルート構成を更新する方法。

これを行う方法はありますか?実際には、複数のページと複数のデモを作成する予定です。そのため、ハードコーディングされたアプローチよりも、もう少し再利用可能なものが必要です。

4

7 に答える 7

1

ブラウザで、デモページを右クリック => [ページ ソースの表示] を選択します

ここに、デモ ページのCSSファイルとJsファイルへのリンクがあります。これらの js/css ファイル リンクをクリックします。正しい/予期される場所にリダイレクトされているかどうかを確認します。それ以外の場合は、それに応じてCss/JsファイルのURLを作成できます。デモ ページによると、各 PageDemo にはJS/Images/cssなどの独自の構造があるためです。

于 2013-08-28T14:14:19.917 に答える
0

JS および CSS ファイルをどのように参照していますか?

: のようなチルダ文字を使用する~/Content/Styles/Site.cssと、仮想パスのどこにいても問題はありません。

于 2013-08-28T05:02:00.303 に答える
0

この回答には2つのアプローチが含まれています。2 番目の方がシナリオにより適している場合があります。最初のものは、一般的な mvc プロジェクトにより適している可能性があります

アプローチする

スクリプトと css ファイルを格納するために、コンテンツ フォルダーに整理された構造を作成することをお勧めします。つまり、

/Content/Demos/Page-Title-1/
/Content/Demos/Page-Title-2/
/Content/Demos/Page-Title-3/

/Content/Demos/Common/

次に、各ページ タイトルのスクリプトと css ファイルをレンダリングするためのバンドルを作成します。

すなわち。

bundles.Add(new StyleBundle("~/Demo/page-title/css").Include(
          "~/Content/Demos/Page-Title-1/csscontent1.css",
          "~/Content/Demos/Page-Title-1/csscontent2.css",
          "~/Content/Demos/Page-Title-1/csscontent3.css",
          "~/Content/Demos/Page-Title-1/csscontent4.css"));

bundles.Add(new StyleBundle("~/Demo/page-title/js").Include(
      "~/Content/Demos/Page-Title-1/jscontent1.css",
      "~/Content/Demos/Page-Title-1/jscontent2.css",
      "~/Content/Demos/Page-Title-1/jscontent3.css",
      "~/Content/Demos/Page-Title-1/jscontent4.css"));

これにより、数行のアプローチを使用してデモ ページでスクリプトをレンダリングできます。

@Styles.Render("~/Demo/page-title/css");
@Scripts.Render("~/Demo/page-title/jss");

@Styles.Render("~/Demo/common/css");
@Scripts.Render("~/Demo/common/css");

/Content/Demos/Page-Title/ フォルダー内のファイルを変更すると、グローバル .asax 内のファイルを更新する必要があります。必要に応じて、ファイルをバンドルおよび縮小して、最初のページの読み込みの帯域幅と読み込み時間を節約できるという利点があります。


2に近づく。

(引き続き、次のフォルダー構造を使用します。

/Content/Demos/Common/

/Content/Demos/Page-Title-1/
/Content/Demos/Page-Title-2/
/Content/Demos/Page-Title-3/)

フォルダー内のすべてのスクリプトとコンテンツを参照する html ヘルパーを作成する

その使用法は @Asset.RenderAssets( '~/folderdirectory') になります

そしてヘルパーは次のようなことをします

@helper RenderAssets (stirng directory){

@* scrape the directory for all script files*
var scripts = find all scripts in the directory

@* include the script files *@
for each script
  <script src=" ... .js"></script>


@* scrape the directory for all cssfiles*
var styles = all css in the directory

@* include the css files *@
for each style
<link rel='stylesheet' type="text/css" href=" ... .css">

}

これは、各デモ ビューで数行使用することになります。

@Asset.RenderAssets( '~/Content/Demos/Common')
@Asset.RenderAssets( '~/Content/Demos/Page-Title')

これをglobal.asaxまたはRouteConfig.csファイルの追加の数行または2行と組み合わせる必要がある場合とない場合があります(ソース3を参照)

routes.IgnoreRoute("/Content/Demos/{page}/{script}.js");
routes.IgnoreRoute("/Content/Demos/{page}/{style}.css");

HTML ヘルパーを作成するための関連ソースについては、 http: //weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx を参照してください。

バンドルと縮小化 (scripts.render アプローチ) を使用するには、 http: //www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification を参照してください。

フィル・ハークは、これを無視ルートと組み合わせる必要はないかもしれないと言います! https://stackoverflow.com/a/30551/1778606

コメントと編集をお勧めします。

于 2013-08-31T23:52:13.990 に答える