मैं js फ़ाइलों को दृश्य के समान फ़ोल्डर में दृश्य से संबंधित रखना चाहता था।
मैं काम करने के लिए इस धागे में अन्य समाधान प्राप्त करने में सक्षम नहीं था, यह नहीं कि वे टूट गए हैं, लेकिन मैं उन्हें काम करने के लिए एमवीसी के लिए बहुत नया हूं।
यहाँ दी गई जानकारी और कई अन्य ढेरों का उपयोग करके मैं एक समाधान के साथ आया:
- जावास्क्रिप्ट फ़ाइल को उसी निर्देशिका में रखने की अनुमति देता है जिस दृश्य से वह संबद्ध है।
- स्क्रिप्ट URL अंतर्निहित भौतिक साइट संरचना को दूर नहीं करता है
- स्क्रिप्ट URL को अनुगामी स्लैश (/) के साथ समाप्त नहीं करना है
- स्थिर संसाधनों के साथ हस्तक्षेप नहीं करता है, जैसे: /Scripts/someFile.js अभी भी काम करता है
- सक्षम होने के लिए runAllManagedModulesForAllRequests की आवश्यकता नहीं है।
नोट: मैं HTTP Attribute Routing का भी उपयोग कर रहा हूँ। यह संभव है कि मार्ग का मेरी आत्मा में उपयोग किए बिना इसे सक्षम किए बिना काम करने के लिए संशोधित किया जा सके।
निम्नलिखित उदाहरण निर्देशिका / फ़ाइल संरचना को देखते हुए:
Controllers
-- Example
-- ExampleController.vb
Views
-- Example
-- Test.vbhtml
-- Test.js
नीचे दिए गए कॉन्फ़िगरेशन चरणों का उपयोग करके, ऊपर दिए गए उदाहरण संरचना के साथ संयुक्त, परीक्षण दृश्य URL के माध्यम से पहुँचा जाएगा: /Example/Test
और जावास्क्रिप्ट फ़ाइल के माध्यम से संदर्भित किया जाएगा:/Example/Scripts/test.js
चरण 1 - रूटिंग विशेषता सक्षम करें:
अपनी /App_start/RouteConfig.vb फ़ाइल संपादित करें और routes.MapMvcAttributeRoutes()
मौजूदा मार्गों के ऊपर जोड़ें । MapRoute :
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Web
Imports System.Web.Mvc
Imports System.Web.Routing
Public Module RouteConfig
Public Sub RegisterRoutes(ByVal routes As RouteCollection)
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
' Enable HTTP atribute routing
routes.MapMvcAttributeRoutes()
routes.MapRoute(
name:="Default",
url:="{controller}/{action}/{id}",
defaults:=New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional}
)
End Sub
End Module
चरण 2-अपनी साइट को इलाज के लिए कॉन्फ़िगर करें, और प्रक्रिया करें, / जटिलताओं कॉन्ट्रास्ट्रोलरलाइड्स / स्क्रिप्ट्स / m.js को एक एमवीसी पथ के रूप में और एक स्थिर संसाधन न करें।
अपनी /Web.config फ़ाइल को संपादित करें, निम्न को जोड़ते हुए system.webServer -> फ़ाइल के हैंडलर अनुभाग:
<add name="ApiURIs-ISAPI-Integrated-4.0" path="*/scripts/*.js" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
यहाँ यह फिर से संदर्भ के साथ है:
<system.webServer>
<modules>
<remove name="TelemetryCorrelationHttpModule"/>
<add name="TelemetryCorrelationHttpModule" type="Microsoft.AspNet.TelemetryCorrelation.TelemetryCorrelationHttpModule, Microsoft.AspNet.TelemetryCorrelation" preCondition="managedHandler"/>
<remove name="ApplicationInsightsWebTracking"/>
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler"/>
</modules>
<validation validateIntegratedModeConfiguration="false"/>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
<remove name="OPTIONSVerbHandler"/>
<remove name="TRACEVerbHandler"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
<add name="ApiURIs-ISAPI-Integrated-4.0" path="*/scripts/*.js" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
चरण 3 - निम्न स्क्रिप्ट कार्रवाई परिणाम को अपनी नियंत्रक फ़ाइल में जोड़ें
- कंट्रोलर के लिए {कंट्रोलर} नाम से मिलान करने के लिए रूट पथ को संपादित करना सुनिश्चित करें, इस उदाहरण के लिए: <मार्ग (" उदाहरण " / लिपियों / {फ़ाइल नाम}")>
आपको अपनी प्रत्येक नियंत्रक फ़ाइल में इसे कॉपी करना होगा। यदि आप चाहते थे, तो एक एकल, एक बार, मार्ग कॉन्फ़िगरेशन के रूप में किसी भी तरह से ऐसा करने का एक तरीका है।
' /Example/Scripts/*.js
<Route("Example/Scripts/{filename}")>
Function Scripts(filename As String) As ActionResult
' ControllerName could be hardcoded but doing it this way allows for copy/pasting this code block into other controllers without having to edit
Dim ControllerName As String = System.Web.HttpContext.Current.Request.RequestContext.RouteData.Values("controller").ToString()
' the real file path
Dim filePath As String = Server.MapPath("~/Views/" & ControllerName & "/" & filename)
' send the file contents back
Return Content(System.IO.File.ReadAllText(filePath), "text/javascript")
End Function
संदर्भ के लिए, यह मेरी ExampleController.vb फ़ाइल है:
Imports System.Web.Mvc
Namespace myAppName
Public Class ExampleController
Inherits Controller
' /Example/Test
Function Test() As ActionResult
Return View()
End Function
' /Example/Scripts/*.js
<Route("Example/Scripts/{filename}")>
Function Scripts(filename As String) As ActionResult
' ControllerName could be hardcoded but doing it this way allows for copy/pasting this code block into other controllers without having to edit
Dim ControllerName As String = System.Web.HttpContext.Current.Request.RequestContext.RouteData.Values("controller").ToString()
' the real file path
Dim filePath As String = Server.MapPath("~/Views/" & ControllerName & "/" & filename)
' send the file contents back
Return Content(System.IO.File.ReadAllText(filePath), "text/javascript")
End Function
End Class
End Namespace
अंतिम नोट्स
test.vbhtml view / test.js जावास्क्रिप्ट फ़ाइलों के बारे में कुछ खास नहीं है और यहाँ नहीं दिखाया गया है।
मैं अपने सीएसएस को व्यू फाइल में रखता हूं लेकिन आप आसानी से इस समाधान में जोड़ सकते हैं ताकि आप अपनी सीएसएस फाइलों को इसी तरह से संदर्भित कर सकें।