私は個人的には、セキュリティ上の理由からhttpHandlerでプレーしたくありません。私は、同じフォルダ構造を2度(ビューとスクリプトフォルダ内で)維持しなければならないのを防ぐために、全く同じことをしたかったのです。だから、私の.cshtmlと同じフォルダに.jsを保存し、もはや404のエラーがないようにすることが目標です。その目標を達成するために
ソリューション
、私は、カスタムのHtmlHelperとJavaScript呼び出しのためのコントローラを使用しています。一度行わ
のHtmlHelper
public static MvcHtmlString JScriptBlock<TModel>(
this HtmlHelper<TModel> html
)
{
// Get the physical path of the .js file we are looking for.
string path = ((System.Web.Mvc.RazorView)html.ViewContext.View).ViewPath.Replace(".cshtml", ".js");
path = HostingEnvironment.MapPath(path);
if (!File.Exists(path))
return null;
// We store the physical path in a session variable with GUID as the key
string guid = Guid.NewGuid().ToString();
HttpContext.Current.Session[guid] = path;
// Create the script block where the src points to the JScript controller. We give the GUID as parameter.
return MvcHtmlString.Create("<script src='/JScript/?id=" + guid + "'/>");
}
JScriptのコントローラー
public ActionResult Index(string id)
{
// id correspond to the guid generated by the MSRJScript helper
// We look if the physical path of the .js is available in the session variables
if(Session[id] == null)
return new HttpStatusCodeResult(HttpStatusCode.Forbidden);
// If the physical path was found, we simply send the file back to the browser.
string path = Session[id].ToString();
Session.Remove(id);
return File(path, "application/javascript");
}
、単にあなたのビュー/ PartialViewに私には
@Html.JScriptBlock()
これは動作しますが、私はそれがビューフォルダ内のjsファイルを置かない方が良いアイディアだと思います。 – ErikE
明示的に許可したいファイルをhttp://stackoverflow.com/questions/604883/where-to-put-view-specific-javascript-files-in-an-aspでホワイトリストに載せることは間違いなく安全です-net-mvc-applicationではなく、cshtmlファイルの要求をフィルタリングするだけです。 – pwdst
私にとって、私は角度を大いに利用するMVCセットアップを構築しました。私はAMDが必要とするすべてのものを持っているので、特定のjavascriptを使用しているビューでは、それらのJavaスクリプトファイルがロードされます。このように、私はすべてを区画化し、フォルダ内のmvcフォルダに関連付けられた角度コントローラをビューに置くことは非常に意味がありました。ですから、私はviews \ ControllerName \ ControllerName.cshtmlとviews \ Controller \ ControllerName-controller.jsのようなものを持っています。 –