এএসপি.নেট এমভিসি - বান্ডিল কনফিগার অর্ডার


84

আমি আমার এএসপি.নেট এমভিসি 5 অ্যাপ্লিকেশনটিতে একটি নির্দিষ্ট লোকেল (এসএসএল) ব্যবহার করার চেষ্টা করছি। আমি নিম্নলিখিত:

  1. "এসএল-সিএল" তে ওয়েবকনফাইগ ইউিকালচার এবং সংস্কৃতি পরিবর্তিত হয়েছে
  2. ইনস্টল Globalize এবং jQuery.Validation.Globalize প্যাকেজ
  3. আমার দর্শনগুলিতে ডিফল্ট ভাষা পরিবর্তন হয়েছে: <html lang="es-cl">
  4. একটি নতুন বান্ডিল তৈরি করেছে এবং উপযুক্ত দৃশ্যে অন্তর্ভুক্ত।

ইন BundleConfig.cs :

bundles.Add(new ScriptBundle("~/bundles/jqueryval")
    .Include("~/Scripts/jquery.validate.js")
    .Include("~/Scripts/jquery.validate.unobtrusive.js"));

bundles.Add(new ScriptBundle("~/bundles/globalization")
    .Include("~/Scripts/globalize/globalize.js")
    .Include("~/Scripts/globalize/cultures/globalize.culture.es-CL.js")
    .Include("~/Scripts/jquery.validate.globalize.js"));

উপযুক্ত মতামত:

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/globalization")
}

তবে উত্পন্ন উত্স কোডটি নিম্নলিখিত:

<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>

<script src="/Scripts/jquery.validate.globalize.js"></script>
<script src="/Scripts/globalize/globalize.js"></script>
<script src="/Scripts/globalize/cultures/globalize.culture.es-CL.js"></script>

দয়া করে নোট করুন যে বিশ্বব্যাপী.জেএস এর আগে jquery.uthorate.globalize.js স্ক্রিপ্টটি লোড করা হচ্ছে , যা আমি চাই না।

ইহা কি জন্য ঘটিতেছে? একটি একক বান্ডেলে অন্তর্ভুক্ত ক্রমের উপর নির্ভর করা কি সম্ভব, বা আমি এই একক স্ক্রিপ্টটিকে অন্য একটি বান্ডেলে রেখে আমার দৃষ্টিতে এটি নির্দিষ্ট করতে বাধ্য?


4
একটি এই প্রশ্নের এ চেহারা আছে stackoverflow.com/questions/11979718/...
পল McCowat

@ পলম্যাককোয়াট হ্যাঁ, তবে আমি এখনও সংক্ষিপ্ত সংস্করণগুলি ব্যবহার করছি না। আমি মাইক্রোসফ্ট.এস্পনেট.ওয়েব.অ্যাপটিমাইজেশন ১.১.০ ব্যবহার করছি।
লিওনার্দো হেরেরা

@ লিওনার্দো হেরেরা আমার মনে হবে ক্রিস তার মন্তব্যে উল্লিখিত মতই বলেছিলেন যে পরিচিত ফাইলগুলি বান্ডলার দ্বারা নির্দিষ্ট একটি আদেশে স্থানান্তরিত করা হয়েছে ... তবে আমি নিশ্চিত হতে পারি না যেহেতু আমি জানি না যে এই ফাইলগুলি কী, যার ফলে আমাকে জিজ্ঞাসা করতে । আমি জানতে আগ্রহী যে আইবান্ডেলঅর্ডারার ব্যবহার করে আপনার জন্য কাজ করে যেহেতু আদেশটি নির্দিষ্ট করে নি।
মাইকস্মিথদেভ

: এ [এই লিঙ্কে] @Softlion উত্তর [1] [1] তাকান stackoverflow.com/questions/11979718/...
Omid-আরএইচ

@section Scripts { @Scripts.Render("~/bundles/jqueryval") }আমার স্ক্রিপ্টগুলি লোড হয়ে যাওয়ার সমস্যাটি সমাধান হয়ে গেছে বলে মনে হচ্ছে ....
পেট্রোসামি

উত্তর:


103

ডিফল্টরূপে, বান্ডেলিং ক্রমটি ওয়াইল্ডকার্ড সহ নামের জন্য বর্ণানুক্রমিক (মন্তব্যে উল্লিখিত হিসাবে)। তবে এটি আপনার নির্ভরতা গাছটি কী মনে করে তার উপর ভিত্তি করে এটিও অর্ডার করে এবং jQueryস্ক্রিপ্টগুলি শীর্ষে স্লট হয়ে গেছে বলে মনে হয়। আপনাকে এমন একটি বিষয় তৈরি করতে হবে যা প্রয়োগ করে IBundleOrder:

class NonOrderingBundleOrderer : IBundleOrderer
{
    public IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
    {
        return files;
    }
}

এটি ডিফল্ট ক্রম প্রতিরোধ করে। এখন এটি ব্যবহার করতে:

var bundle = new ScriptBundle("~/bundles/globalization")
    .Include("~/Scripts/globalize/globalize.js")
    .Include("~/Scripts/globalize/cultures/globalize.culture.es-CL.js")
    .Include("~/Scripts/jquery.validate.globalize.js");

bundle.Orderer = new NonOrderingBundleOrderer();

bundles.Add(bundle);

রেফ: http://stevescodingblog.co.uk/changing-the-ordering-for-single-bundles-in-asp-net-4/

আরও পড়ার জন্য, মাইকস্মিথদেবের প্রশ্নের উত্তর একটি জনপ্রিয় জনপ্রিয় স্ক্রিপ্ট লাইব্রেরির জন্য ডিফল্ট ক্রমটির আরও অন্তর্দৃষ্টি প্রদান করে:

একটি বান্ডিলের মধ্যে ফাইল অর্ডার করা - পরিচিত গ্রন্থাগারগুলি কী কী?


নাইটপিকের জন্য নয়, তবে "ডিফল্টরূপে, বান্ডিলিং ক্রম বর্ণানুক্রমিক" সত্য যখন আপনি ওয়াইল্ড কার্ডের মতো জিনিস ব্যবহার করেন ... যখন আপনি তার যেমন আদেশটি নির্দিষ্ট করেন, তার উচিত তার আদেশটি ব্যবহার করা উচিত। আমি কেবল ধরে নিতে পারি যে বান্ডলারটি পরিচিত ফাইল ধরণের কাছাকাছি চলেছে এবং তার আদেশটিকে উপেক্ষা করছে।
মাইকস্মিথেডেভ

দেখে মনে হচ্ছে বান্ডিলারও নির্ভরতা সম্পর্কে কিছু যুক্তি ব্যবহার করে অর্ডার করে। এটি jquery.validate.globalize.jsঅন্য দুটির জন্য প্রয়োজনীয় বলে মনে করে । রেফ থেকে: "[বান্ডেলার] এমনকি জিকুয়েরি বা প্রোটোটাইপ স্ক্রিপ্টগুলির মতো স্বয়ংক্রিয়ভাবে বান্ডলে পরিচিত ফ্রেমওয়ার্ক জাভাস্ক্রিপ্ট ফাইলগুলি প্রথমে রাখবে যাতে তারা নিজের কোড ব্যবহার করে যা তাদের ধরণের ব্যবহার হয় তার আগে চালিত হয়"
মিস্টার এপিক

4
চমত্কার অর্ডারটি হ'ল: jquery.js jquery-min.js jquery- * jquery-ui * jquery.ui * jquery.unobtrusive * jquery.uthorate * modernizr- * dojo। * স্ক্রিপ্টাকুলাস- * ext.js ext- *
রাভান্ডাল

6
প্রোগ্রামিং মজা নয় যেখানে এখানে। ভিএস কেন এই জটিল করে তোলে?
জায়েদার

4
এর উপস্থিতিটি আমার মনকে এটি কতটা নির্বোধের সাথে উড়িয়ে দেয়। সত্যিই .. বান্ডলার আমার নির্ভরতাগুলি টাইপ করার চেয়ে কীভাবে আরও ভালভাবে অর্ডার করতে পারেন তা আরও ভাল জানেন? গুলপ.জেএস (বা গ্রান্ট) এফটিডাব্লু!
জন কালভিনার

30

এমভিসি 5 এর সর্বশেষ সংস্করণে (2014 সালের ২ 27 অক্টোবর), আপনার পরিবর্তে এই শ্রেণিটি ব্যবহার করা উচিত:

class AsIsBundleOrderer : IBundleOrderer
{
    public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
    {
        return files;
    }
}

এবং অন্যান্য প্রতিক্রিয়ার মতো বান্ডিলটি তৈরি করুন:

var bundle = new ScriptBundle("~/bundles/globalization")
.Include("~/Scripts/globalize/globalize.js")
.Include("~/Scripts/globalize/cultures/globalize.culture.es-CL.js")
.Include("~/Scripts/jquery.validate.globalize.js");

bundle.Orderer = new AsIsBundleOrderer();

bundles.Add(bundle);

আমি এই তথ্যটি কোথায় খুঁজে পাব? আপনি একটি লিঙ্ক প্রদান করতে পারেন দয়া করে?
পুসইনবুটস

আমি এই প্রশ্নের জন্য কেবলমাত্র বর্তমান প্রতিক্রিয়াটির পদ্ধতিটি ব্যবহার করার চেষ্টা করেছি তবে আমি আমার সেলকফকে এএসপি.নেট এমভিসি 5 তে একটি ত্রুটিযুক্ত অবস্থায় পেয়েছি, তাই আমি আইবান্ডেলঅর্ডারারের ইন্টারফেসটি দেখেছি এবং পরিবর্তনগুলি করেছি
সেবাস্তিয়ান রোজাস

কোনও অর্ডারারের সম্পত্তি নেই। আমি এমভিসি 5.2.x
কিংবদন্তি

4
আমি কেবল এটি এমভিসি 5.2.3 দিয়ে পরীক্ষা করি এবং টেহরেস অর্ডারার সম্পত্তি।
সেবাস্তিয়ান রোজাস

29

বান্ডিল তৈরি করার সময় কোডগুলি হ্রাস করতে , আমি আপনাকে একটি সম্প্রসারণ পদ্ধতি তৈরি করার পরামর্শ দিই।

পরিকাঠামো ক্লাস প্রয়োজন:

class NonOrderingBundleOrderer : IBundleOrderer
{
    public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
    {
        return files;
    }
}


static class BundleExtentions
{
    public static Bundle NonOrdering(this Bundle bundle)
    {
        bundle.Orderer=new NonOrderingBundleOrderer();
        return bundle;
    }
}

এখন কেবল এটির মতো ব্যবহার করুন:

সমস্ত এক কমান্ড 😎

bundles.Add(new ScriptBundle("~/bundles/jqueryval")
               .NonOrdering()
               .Include(
                    "~/Scripts/globalize/globalize.js",
                    "~/Scripts/globalize/cultures/globalize.culture.es-CL.js",
                    //...
                );

4
ভাবনার দুর্দান্ত উপায়!
অরুনা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.