2017-10-28 5 views
1

ビューディレクトリの外に保存された@モデルを受け取る部分ビューファイルがあります。実際にはapp_dataに格納されています。ASP MVC 5 - ビューフォルダ外の部分ビューファイル

私はエラーを取得するしかし:

以下
The name 'model' does not exist in the current context 
Source File: ...\app_data\_DefaultLayout.cshtml 

は私のコードです:次のように

@Html.Partial("~/app_data/_DefaultLayout.cshtml"), Model) 

デフォルトレイアウトは次のとおりです。

@using System.Web.Mvc 
@using System.Web.Mvc.Html 
@model MyApp.ViewModels.CreateCaseViewModel 

// some html and razor code 

答えて

2

App_Dataは、ASP.NETの特別なディレクトリで、XMLファイル/ mdfファイルなどのデータファイルを格納してデータを保存することが想定されています。アクセスも制限されています。

あなたは、そのフォルダにUIレイヤの懸案事項(ビュー)を置いてはいけません。 Asp.NET MVCは、~/ViewsディレクトリのUIレイヤーのための規則を持っています。あなたの意見を守るためにその場所を使用してください。

絶対に必要な場合は、アプリケーション内のどこにでも表示ファイルを置くことができます(たとえば、これらのシステムディレクトリを除く)。たとえば、MyPartialViewsという名前のディレクトリを作成し、そこに部分ビューを作成し、 。重要なことは覚えておくと、あなたはそのフォルダにWeb設定を持っている必要があります(~/Viewsからコピーしてそこに置く)。ウェブ設定には、すべてのビューに対してpageBaseTypeを含む多くの必要な要素があります。

+0

はい私はこの規約を承知しています。しかし、私はユーザーがレイアウトファイルをアップロードできるようにする必要があり、明示的なセキュリティ上の理由から、ビューフォルダ内でそのようなアクセスを許可することができません。 – adam78

+0

ユーザーがレイアウトファイルをアップロードできるようにしてはいけません。もしそれらが再帰的ループのためのC#コードを持っているいくつかのファイルをアップロードすればどうなるでしょうか?あなたのアプリのルートからファイルを読み込み、それをuiに表示するコードがあればどうなりますか?コードはサーバ上で実行され、人々はそれを誤って使用することができます。それはセキュリティ上の懸念です。気になるのがhtmlマークアップ/スタイルであれば、リッチテキストエディタのようなページを編集できるエディタuiのようなものを考慮して、そのマークアップをテーブルに格納し、必要に応じてレンダリングするようにする必要があります。ブログ) – Shyju

+0

フォームの構造体がxmlまたはjsonとして格納されているフォームをレイアウトできるようにするには、それらが必要です。カミソリを使うことはxsltよりはるかに簡単でした。だから私はカミソリを使ってレイアウトを保存しています。もう1つのオプションは、xsltを使用してフォームを構築し、ユーザーがフォームをレイアウトするためにxsltファイルをアップロードできるようにすることです。 – adam78

2

この例外はCSHTMLのコンパイルエラーですファイル。ビューはモデルタイプにアクセスできません。ソリューションエクスプローラを確認すると、2つのweb.configファイルがあります.1つはビューフォルダにあり、もう1つはルートレベルにあります。

ソートする方法の1つは、Views/web.configのコピーをApp_Dataに作成することです。

関連する問題