স্টাইলস। এমভিসি 4 এ রেন্ডার


381

একটি .NET MVC4প্রকল্পে কিভাবে @Styles.Renderকাজ করে?

মানে, @Styles.Render("~/Content/css")কোন ফাইলে ফোন দিচ্ছে?

আমার Contentফোল্ডারের ভিতরে "সিএসএস" নামে একটি ফাইল বা ফোল্ডার নেই।


11
আমার এএসপিএন / এমভিসি / টিউটোরিয়ালস
এমভিসি ২৪

উত্তর:


453

এটি সেই নির্দিষ্ট বান্ডেলে অন্তর্ভুক্ত ফাইলগুলিকে কল করছে যা ফোল্ডারে BundleConfigশ্রেণীর অভ্যন্তরে ঘোষণা করা হয়েছে App_Start

সেই বিশেষ ক্ষেত্রে কলটি @Styles.Render("~/Content/css")"~ / সামগ্রী / সাইট.css" কল করছে।

bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

22
একটি জিনিস জানতে হবে এটি ইতিমধ্যে বান্ডেলে ছোট করা একটি .css ফাইল যুক্ত করবে না। উদাহরণ: এটি bootstrap.min.js দিয়ে কাজ করে না, কেবল বুটস্ট্র্যাপ.জেএস দিয়ে s আমি আশা করি এটি অন্যকে সহায়তা করতে পারে।
কোডে

5
এটি স্ক্রিপ্ট নয়, স্টাইলগুলির কথা বলছে। আপনি যদি বুটস্ট্র্যাপ.মিন.জেএস ব্যবহার করতে চান তবে কেবল এই জাতীয় একটি বান্ডিল তৈরি করুন: বান্ডেলস.এড করুন (নতুন স্ক্রিপ্টবান্ডেল ("~ / স্ক্রিপ্টস / বুটস্ট্র্যাপ.মিন.জেএস")) অন্তর্ভুক্ত করুন;
এক্সকালিবুর

1
@codea আমি নিশ্চিত নই সেট-আপ, কিন্তু ডিফল্ট ভাবে bundler নিতে হবে কি *.min.*ধরে *.*ফাইল।
skmasq

@ এস্কম্যাস্ক, এই লাইনগুলি লেখার সময়, আমি ভিএস ২০১৩ ব্যবহার করছিলাম। এখন পর্যন্ত বিষয়গুলি পরিবর্তিত হতে পারে। যে উল্লেখ করার জন্য ধন্যবাদ :)
কোডে

আমি এটি পাচ্ছি না .... এমভিসি-তে এই পাগল ক্লাসগুলিতে বান্ডিলগুলি তৈরি করতে এবং সেই পাথগুলিকে যুক্ত করতে সমস্ত সমস্যায় কেন যাবেন যখন আপনি কেবল নিজের ওয়েব পৃষ্ঠার ফাইলটিতে একটি সিএসএস <লিঙ্ক> যোগ করতে পারবেন? যদি আপনি আপনার সমস্ত সিএসএস লিঙ্কগুলি আপনার স্টাইল শিটগুলিতে লেআউট ফাইল বা আংশিক দৃশ্যে যোগ করেন তবে আপনি সেগুলিকে একটি সাধারণ জায়গায় পরিচালনা করতে পারেন। এটি স্টাইল পাথের মতো শক্ত কোডের পক্ষেও খারাপ ডিজাইন, কারণ আপনি এখন আর সিএসএস স্কিন তৈরি করতে পারবেন না যা 20 বছর আগে ডিজাইনের সময় সিএসএস সিস্টেমের পুরো উদ্দেশ্য ছিল।
স্টোকলি

34

কেস সংবেদনশীলতা জন্য সতর্কতা অবলম্বন করুন। আপনার যদি একটি ফাইল থাকে

/Content/bootstrap.css

এবং আপনি আপনার Bundle.config এ পুনঃনির্দেশ করুন

.Include ( "~ / বিষয়বস্তু / Bootstrap.css")

এটি সিএসএস লোড করবে না।


এছাড়াও: দ্বিতীয় অন্তর্ভুক্তটি আলাদাভাবে বানান করা হয়।
ড্যান এস্পার্জা

1
সাস / কম-ফাইলের জন্যও কি সমর্থন আছে?
মান্টিকোর

12

পার্টিতে কিছুটা দেরি। তবে দেখে মনে হচ্ছে কেউ এর
বান্ডিলিং এবং মিনিফাইজেশন এর কথা উল্লেখ করেনি StyleBundle, তাই ..

@Styles.Render("~/Content/css") 

কল Application_Start():

BundleConfig.RegisterBundles(BundleTable.Bundles);            

যা ঘুরে ফিরে কল

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new StyleBundle("~/Content/css").Include(
              "~/Content/bootstrap.css",
              "~/Content/Site.css"));
}

RegisterBundles()কার্যকরভাবে সম্মিলন & minifies bootstrap.css & Site.css
একটি একক ফাইলের মধ্যে,

<link href="/Content/css?v=omEnf6XKhDfHpwdllcEwzSIFQajQQLOQweh_aX9VVWY1" rel="stylesheet">

তবে ..

<system.web>
  <compilation debug="false" targetFramework="4.6.1" />
</system.web>

শুধুমাত্র যখন debug সেট করা falseথাকে Web.config
অন্যথায় bootstrap.css& Site.cssস্বতন্ত্রভাবে পরিবেশন করা হবে।
বান্ডিল নয়, মাইনাইফ করা হয়নি:

<link href="/Content/bootstrap.css" rel="stylesheet">
<link href="/Content/Site.css" rel="stylesheet">


0

যেমন App_start.BundleConfig এ সংজ্ঞায়িত করা হয়েছে, এটি কেবল কল করছে

bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

আপনি এই বিভাগটি সরিয়ে দিলে কিছুই হয় না।


0

পোলো আমি একাধিক কারণে এমভিসিতে বান্ডিল ব্যবহার করব না। এটি আপনার ক্ষেত্রে কাজ করে না কারণ আপনার অ্যাপ্লিকেশনসস্টার্ট ফোল্ডারে আপনাকে একটি কাস্টম বান্ডেলকনফিগ শ্রেণি নির্ধারণ করতে হবে। আপনি যখন নিজের এইচটিএমএল এর মাথায় এমন স্টাইল যুক্ত করতে পারেন তখন এটির কোনও অর্থ হয় না:

<link rel="stylesheet" href="~/Content/bootstrap.css" />
<link rel="stylesheet" href="~/Content/bootstrap.theme.css" />

আপনি এগুলি একটি লেআউট.সি.এস.টি.এম.এল বা আংশিক শ্রেণিতে যুক্ত করতে পারেন যা আপনার সমস্ত দর্শন থেকে ডেকে প্রতিটি পৃষ্ঠায় ফেলে দেওয়া হয়েছে। যদি আপনার শৈলীর পরিবর্তন হয়, আপনি সহজেই পুনরায় কম্পাইল না করে নাম এবং পথ পরিবর্তন করতে পারেন।

ক্লাসে সিএসএসে হার্ড-কোডড লিঙ্কগুলি যুক্ত করার সাথে সাথে ইউআই এবং অ্যাপ্লিকেশন মডেল থেকে ডিজাইনের বিচ্ছিন্ন করার পুরো উদ্দেশ্যটি রয়েছে। আপনি সি # তে পরিচালিত হার্ড কোডড স্টাইল শিট পাথগুলিও চাইবেন না কারণ আপনি "স্কিনস" বা আলাদা ডিভাইস, থিম ইত্যাদি বলতে আলাদা স্টাইলের মডেল তৈরি করতে পারবেন না:

<link rel="stylesheet" href="~/UI/Skins/skin1/base.css" />
<link rel="stylesheet" href="~/UI/Skins/skin2/base.css" />

এই সিস্টেম এবং রেজার ব্যবহার করে আপনি এখন কোনও ডাটাবেস বা ব্যবহারকারীর সেটিং থেকে স্কিন পাথ স্যুইচ আউট করতে পারেন এবং কেবলমাত্র গতিপথের পরিবর্তনে আপনার ওয়েবসাইটের পুরো নকশাটি পরিবর্তন করতে পারেন।

১৫ বছর আগে সিএসএসের পুরো উদ্দেশ্য ছিল সাইটগুলির জন্য ব্যবহারকারী-নিয়ন্ত্রিত এবং অ্যাপ্লিকেশন-নিয়ন্ত্রিত স্টাইল শীট "স্কিনস" উভয়ই বিকাশ করা যাতে আপনি ইউআই চেহারা পরিবর্তন করতে পারেন এবং অ্যাপ্লিকেশন থেকে পৃথক বোধ করতে পারেন এবং ডেটা কাঠামোর বাইরে পৃথক বিষয়বস্তুটিকে নতুন করে তৈরি করতে পারেন। .... উদাহরণস্বরূপ একটি মুদ্রণযোগ্য সংস্করণ, মোবাইল, অডিও সংস্করণ, কাঁচা এক্সএমএল ইত্যাদি

এখন এই "পুরাতন ধাঁচের" দিকে ফিরে যান, সি # ক্লাস ব্যবহার করে হার্ড-কোডড পাথ সিস্টেম, বুটস্ট্র্যাপের মতো অনমনীয় শৈলী এবং অ্যাপ্লিকেশন কোডের সাথে সাইটের থিমগুলি মার্জ করে, আমরা কীভাবে ওয়েবসাইটগুলি 1998 সালে নির্মিত হয়েছিল তার দিকে আমরা আবার পিছনে চলে এসেছি।


1
সুতরাং, minificationতারপর হ্যাক ? : এস / :(
স্কট ফ্রেলে

হ্যাঁ. কেন 2019 এর বিকাশকারীরা সিএসএস এবং জাভাস্ক্রিপ্টকে ন্যূনতম করছেন তবে তারপরে অ্যাঙ্গুলার এবং অন্যদের মতো এপিআই তৈরি করছে যা ক্লায়েন্টগুলিকে অপ্রয়োজনীয় ECMAScript (জাভাস্ক্রিপ্ট) মেগাবাইট প্রেরণ করে? আমরা সীমিত ব্যান্ডউইথ সহ গ্রাহকদের কাছে কম কোড বা সংক্ষেপিত কোড পাঠাতাম যাতে তারা কোডটি পেতে পারে যখন তারা ব্যান্ডউইথ দ্বারা সীমাবদ্ধ ছিল .... অর্থাৎ 14 কে বাউড মডেমগুলি। আমাদের 5 জি আসছে তাই জিআইপি সংক্ষেপণ বা মিনিফিকেশন যেমন কোড সংকোচনের প্রয়োজন হয় না। তবুও ফলস্বরূপ আমরা ক্লায়েন্টদের কাছে বিশাল স্ক্রিপ্টগুলি প্রেরণ করে পিছনে চলে গিয়েছি। তাহলে কেন কিছু না কম?
স্টোকলি

1
কারণ আমাদের যতটা সম্ভব তারের উপর দিয়ে পাঠানো উচিত? আমি অবশ্যই জিনিসগুলি সর্বনিম্ন রাখতে চেষ্টা করি।
স্কট ফ্রেলে

0

আমি এমভিসি 3 ওয়েবে বন্ডলিং যুক্ত করার জন্য প্রয়োজনীয় সমস্ত কাজ করেছি (আমি বিদ্যমান সমাধানে নতুন)। Styles.Renderআমার জন্য কাজ করেনি। আমি অবশেষে আবিষ্কার করলাম আমি কেবল একটি কোলন অনুপস্থিত। একটি মাস্টার পৃষ্ঠাতে: <%: Styles.Render("~/Content/Css") %> কেন এখনও (একই পৃষ্ঠায়) কোলন ছাড়াই<% Html.RenderPartial("LogOnUserControl"); %> কাজ করে তা সম্পর্কে আমি বিভ্রান্ত ।

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