19

मैं Google मानचित्र के लिए एक jQuery लाइब्रेरी का उपयोग करता हूं, और यह Google स्क्रिप्ट को पहले लोड होने पर निर्भर करता है। मैं इस तरह के रूप बंडल में दोनों को शामिल करने में सक्षम होना चाहते हैं:एएसपी बंडल में पूर्ण यूआरएल

bundles.Add(new ScriptBundle("myfoobundle").Include(
    "http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places", 
    "~/scripts/jquery.fooplugin-{version}.js" 
)); 

यह काम करने के लिए प्रतीत नहीं होता है (एक अपवाद पहली स्ट्रिंग के बारे में शिकायत फेंकता है)। और कोई कह सकता है कि यह काम नहीं करना चाहिए क्योंकि वह पूर्ण यूआरएल छोटा/बंडल करने के लिए नहीं है।

लेकिन वर्तमान दृष्टिकोण के रूप में मैं यह सुनिश्चित करें कि निर्भरता सही हैं की जरूरत है, एक परेशानी है, और कहा कि विभिन्न स्थानों में होता है (बंडलिंग कोड में आधी समस्या, दृश्य के अन्य आधा)।

ऊपर जैसा 1-चरण समाधान होना अच्छा लगेगा। क्या मेरे पास इस संबंध में कोई विकल्प है?

अद्यतन:

एक CDN एक समाधान के रूप में प्रयोग के बारे में टिप्पणी के समाधान के लिए: अगर मैं bundles.UseCdn = true यह कोई प्रभाव नहीं है निर्दिष्ट करें, और मैं अभी भी अपवाद The URL 'http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places' is not valid. Only application relative URLs (~/url) are allowed मिलता है। इसके अलावा मुझे यकीन है कि ऐसा करने का निहितार्थ पहले स्थान पर है, क्योंकि मैं पहले से ही jQuery के लिए सीडीएन समर्थन का उपयोग करता हूं, इसलिए यह सुनिश्चित नहीं है कि संघर्ष मेरे उपयोग मामले के साथ कैसे होगा।

bundles.UseCdn = true; 
+0

पहली स्ट्रिंग के बारे में अपवाद क्या कहता है? यदि आप 'UseCdn' को सत्य पर सेट करते हैं, तो आपके कोड को काम करना चाहिए। – robasta

+0

@rob यह 'UseCdn' सक्षम – Odys

+0

एएसपी बंडल के साथ काम नहीं करता है नीली शीट –

उत्तर

7

वर्तमान में आप jQuery कि आप बंडल के अंदर के आधार पर कर रहे हैं की एक स्थानीय प्रति शामिल करने के लिए होता है, या आप का प्रबंधन करने के लिए होगा जैसा कि आप उल्लेख करते हैं स्क्रिप्ट टैग। हम depedency प्रबंधन मुद्दे के इस प्रकार के बारे में पता कर रहे हैं और यह परिसंपत्ति प्रबंधन की श्रेणी है जो हम इस work item on codeplex

+0

निश्चित उत्तर हाओ के लिए धन्यवाद! मुझे उम्मीद है कि आप लोग जल्द ही इस दौर में आ जाएंगे। मैं जो कुछ ढूंढ रहा था वह एक बंडल में रिमोट स्क्रिप्ट को शामिल करने का एक तरीका है (उस कोडप्लेक्स वर्कटाइम में समझाया गया कुछ भी जटिल नहीं है। –

0

आप CDN समर्थन सक्षम करने और देख करने की कोशिश की है कि अगर काम करने के लिए पूर्ण URL की अनुमति देता है। और जैसा कि अन्य ने कहा है, सुनिश्चित करें कि आपके पास bundles.UseCdn = true; संपत्ति सेट है। MVC site पर उदाहरण का उपयोग - अपने कोड को प्रदर्शित करना चाहिए निम्नलिखित:

public static void RegisterBundles(BundleCollection bundles) 
{ 
    bundles.UseCdn = true; //enable CDN support 
    //add link to jquery on the CDN 
    var jqueryCdnPath = "http://maps.googleapis.com/maps/api/js?sensor=false&libraries=places"; 
    bundles.Add(new ScriptBundle("myfoobundle", jqueryCdnPath).Include(
       "~/Scripts/jquery-{version}.js")); 
} 
+1

यह सुनिश्चित नहीं है कि यह प्रश्नों का उत्तर देता है लेकिन यह जानना अच्छा है कि इस तरह का कोई विकल्प है। – NVM

+1

यह – Odys

6

MVC ट्यूटोरियल के आधार पर, अपने वाक्य रचना एक CDN से एक बंडल बनाने के लिए सही नहीं है:

+6

की सहायता नहीं करता है यह कोड मुझे एक सीडीएन से jQuery लोड करने की अनुमति देगा, जो मैं पहले से ही करता हूं। मैं चाहता हूं कि कुछ अन्य असंबंधित लाइब्रेरी (Google मानचित्र सामग्री) को उचित बंडल में एक पूर्ण यूआरएल के रूप में शामिल करना है। –

1

मैं इस कोशिश की के साथ ट्रैक के रूप में सुझाव के अंतर्गत आता है और यह काम नहीं किया:

string googleMapsApiCDN = "http://maps.google.com/maps/api/js?sensor=false&language=en"; 
     bundles.Add(new ScriptBundle("~/bundles/gmap3", googleMapsApiCDN).Include(
        "~/Scripts/GMap3/gmap3.min.js",   // GMap3 library 
        "~/Scripts/GMap3/mygmap3-about.js"  // Pops up and configures  
GMap3 on About page 
        )); 

mygmap3-about.js स्क्रिप्ट को प्रस्तुत किया गया था लेकिन gmap3.min.js और Google से सीडीएन स्क्रिप्ट जहां दोनों को छोड़ दिया गया था।

5

यदि यह बंडल में पूर्ण यूआरएल प्राप्त करने का मामला है तो आप इसके लिए जा सकते हैं।

public static class Extensions 
    { 
     public static IHtmlString RenderScript(this UrlHelper helper, params string[] paths) 
     { 
      string scripts = System.Web.Optimization.Scripts.Render(paths).ToHtmlString(); 
      string hostName = HttpContext.Current.Request.Url.Scheme + Uri.SchemeDelimiter + HttpContext.Current.Request.Url.Authority; 
      string replaced = Regex.Replace(scripts, "src=\"/", "src=\"" + hostName + "/", RegexOptions.Multiline | RegexOptions.IgnoreCase); 
      return new HtmlString(replaced); 
     } 
    } 

यह मूल रूप से स्क्रिप्ट्स से ब्रह्वीर ले जाएगा। प्रस्तुत करें और फिर इसे पूर्ण यूआरएल लागू करें। तब ध्यान में रखते हुए आप आप System.Web.Optimization> = 1.1 का एक संस्करण उपयोग कर रहे हैं

@Url.RenderScript("~/bundles/jquery") 

बजाय

+0

धन्यवाद ध्रुमिल! इससे मुझे मदद मिली, जबकि मैं बंडल jquery फ़ाइलों के साथ एसिंक टैग का उपयोग करने की कोशिश कर रहा था। –

8

की

@Scripts.Render("~/bundles/jquery") 

कोडिंग का आनंद लें !! ... लिखने के लिए की है।2, Styles और Scripts के लिए यूआरएल को ओवरराइड करने का एक नया सुविधाजनक तरीका है। नीचे दिए गए उदाहरण में, मैं एक CdnBaseUrlweb.config से सभी स्क्रिप्ट और स्टाइलशीट के लिए आधार यूआरएल के रूप में उपयोग करने के लिए हथियाने हूँ:

public class BundleConfig 
{ 
    private static readonly string BaseUrl = ConfigurationManager.AppSettings["CdnBaseUrl"]; 

    public static void RegisterBundles(BundleCollection bundles) 
    { 
     // This is the new hotness!! 
     Styles.DefaultTagFormat = "<link href=\"" + BaseUrl + "{0}\" rel=\"stylesheet\"/>"; 
     Scripts.DefaultTagFormat = "<script src=\"" + BaseUrl + "{0}\"></script>"; 

     bundles.Add(new ScriptBundle("~/bundles/js").Include(
      "Your scripts here..." 
     )); 

     bundles.Add(new StyleBundle("~/bundles/css").Include(
      "Your css files here..." 
     )); 
    } 
} 

More info on static site (CDN) optimization

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^