मैं व्यक्तिगत कारणों से सुरक्षा कारणों से httpHandlers के साथ खेलना पसंद नहीं करता हूं। मैं वही फ़ोल्डर संरचना को दो बार बनाए रखने से रोकने के लिए एक ही चीज़ करना चाहता था (दृश्य में और स्क्रिप्ट फ़ोल्डर में)। तो, लक्ष्य .js को उसी फ़ोल्डर में संग्रहीत करना है जो मेरे .cshtml के रूप में है और अब 404 त्रुटि नहीं है।
समाधान
उस लक्ष्य तक पहुंचने के लिए, मैं एक कस्टम HtmlHelper और जावास्क्रिप्ट के लिए कहता है एक नियंत्रक का उपयोग करें।
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()
स्रोत
2015-05-07 12:00:06
यह काम करता है, लेकिन मुझे लगता है यह एक बेहतर विचार दृश्य फ़ोल्डर में js फ़ाइलें नहीं डाल करने के लिए है। – ErikE
http://stackoverflow.com/questions/604883/where-to-put-view-specific-javascript-files-in-an-asp पर उत्तर के अनुसार स्पष्ट रूप से अनुमति देने वाली फ़ाइलों को श्वेतसूची में निस्संदेह सुरक्षित रखना सुरक्षित है। cnettml फ़ाइलों के लिए फ़िल्टर अनुरोधों के बजाय -नेट-एमवीसी-एप्लिकेशन स्वयं। – pwdst
मेरे लिए, मैंने एक एमवीसी सेटअप बनाया है जो कोणीय का भारी उपयोग करता है। मैंने जम्मू की आवश्यकता के साथ सब कुछ भी किया है, इसलिए कुछ जावास्क्रिप्ट टुकड़ों का उपयोग करने के लिए केवल उन दृश्यों को लोड करने के लिए उन जावा स्क्रिप्ट फ़ाइलों का उपयोग होता है। इस तरह मैंने सब कुछ विभाजित किया और दृश्य के साथ फ़ोल्डर में एक एमवीसी फ़ोल्डर से जुड़े कोणीय नियंत्रक को रखने के लिए बहुत समझदारी की। तो मेरे पास कुछ विचार \ ControllerName \ ControllerName.cshtml और विचार \ नियंत्रक \ नियंत्रकनाम-नियंत्रक.जेएस जैसे कुछ हैं। –