سؤال

أحاول الوصول إلى ملف .js في دليل المشاهدات. لدي تطبيق MVC مع /views/home/mycontrol.ascx لدي ملف js/views/home/mycontrol.js

أرغب في الرجوع إلى ملف .js والاحتفاظ به مع عنصر التحكم. لقد جربت الإدخالات التالية في التوجيه ، ولا يبدو أن أي شيء يعمل.

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{file}.js");
        routes.IgnoreRoute("{resource}.js/{*pathInfo}");
        routes.IgnoreRoute("{controller}/{resource}.js/{*pathInfo}");
        routes.IgnoreRoute("{*alljs}", new { alljs = @".*\.js(/.*)?" });

الرجاء المساعدة ، من فضلك لا تقترح إضافة ملف .js إلى دليل البرامج النصية. أود أن أجعلها تعمل بهذه الطريقة ، أو أعرف لماذا لا يمكن القيام بذلك.

أود أن أضع البرنامج النصي في الصفحة ، يتم كسر تصحيح النصوص فقط في VS2010 B2.

شكرا تحيات كريج.

هل كانت مفيدة؟

المحلول

ال Views المجلد هو ، جيد للآراء ، ويجب وضع جافا سكريبت في مكان آخر. لهذا السبب وضع مصممي إطار MVC web.config في هذا Views المجلد الذي يحرم الوصول إلى أي ملف في الداخل. يمكنك تعديل هذا الإعداد defaut ولكن تحذر من أن هذا قد يكون حفرة أمنية محتملة. حتى افتح web.config ملف موجود في Views مجلد و:

يحل محل:

<httpHandlers>
  <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

مع:

<httpHandlers>
  <add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
  <add path="*.master" verb="*" type="System.Web.HttpNotFoundHandler"/>
  <add path="*.ascx" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

انتقل إلى http://yoursite/Views/test.js

ملاحظة: يمكنك أيضًا إزالة كل IgnoreRoutes كنت تضع global.asax.

نصائح أخرى

ألن يكون هذا حلًا أفضل باستخدام DefaultHttphandler لموارد HTML والحفاظ على httpnotfoundhandler لجميع أنواع الملفات الأخرى

<httpHandlers>  
  <add path="*.html" verb="*" type="System.Web.DefaultHttpHandler"/> 
  <add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
</httpHandlers> 

في الواقع لوضع IIS المتكامل ، تحتاج إلى استخدام System.Web.StaticHttpHandler:

<httpHandlers>
  <add path="*.css" verb="*" type="System.Web.StaticHttpHandler"/> 
  <add path="*.js" verb="*" type="System.Web.StaticHttpHandler"/> 
  <add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
</httpHandlers>

فيما يبدو System.Web.DefaultHttpHandler يعمل في الوضع الكلاسيكي IIS فقط.

في MVC 4 ، اضطررت إلى تحديث قسم المعالج وكذلك قسم httphandlers.

لقد قمت بتحديث web.config في مجلد العرض مع ما يلي.

<httpHandlers>
  <add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
  <add path="*.cshtml" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

<handlers>
  <remove name="BlockViewHandler" />
  <add name="BlockViewHandlerRazor" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
  <add name="BlockViewHandlerAspx" path="*.aspx" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top