PDA

View Full Version : سوال: قرار دادن فایل CSS در DLL



mohammad272005
شنبه 13 خرداد 1391, 14:06 عصر
با سلام.
من میخوام یه User Control داشته باشم در یه DLL که فایل CSS مخصوص خودش رو در دل DLL داشته باشه. منظورم اینه که میخوام User Control یک یا چند ظاهر پیش‏فرض داشته باشه که برنامه‏نویس بتونه در صورت تمایل، از تنظیمات پیش‏فرض استفاده کنه. در غیراینصورت CSS خودش رو به کنترل من بده.
به نظر دوستان، راهی هست؟

aminghaderi
شنبه 13 خرداد 1391, 15:52 عصر
راه داره ولی منطقی نیست.
می شه تعریف کرد ، در بار گذاری usercontrol اگر فایل css وجود نداشته باشه همونجا تولید کنه و به صفحه اظافه کنه و اگر هم که بود از همون استفاده کنه.

مشکلات :
1- سربار بالا
2- حجم بالای پردازش برای اولین بار .
3- دیر لود شدن صفحه . (صفحه شما مطمئنا یه یوزر کنترل که نداره؟!)
4- هندل کردن کلاس های پایه دات نت برای اینترفیس که اگر بازدید سایت یا پرتال شما بالا برود به مشکل کند بودن و عدم بهینگی می رسید.

+ اما مگه می شه یوزر کنترل رو dll کرد؟ خود شما امتحان کردید؟؟

mohammad272005
شنبه 13 خرداد 1391, 17:01 عصر
با سلام و تشکر از پاسختون....
بله. فرض کنید یه کنترل PersianDatePicker (از اسمش مشخصه به چه درد میخوره) در یه dll ایجاد کردیم که نیاز داره styleهای خودش رو داشته باشه. طبق فرموده شما، استفاده از css در dll، منطقی نیست. باین ترتیب راه منطقیش، ایجاد style بصورت inline هست؟ در این صورت، چطور میشه بعدا style رو عوض کرد؟ یا راه دیگه‏ای داره؟
و اگه ccs در dll امکانپذیره، میشه مختصرا بفرمایید چطور میشه این کار رو انجام داد؟

aminghaderi
شنبه 13 خرداد 1391, 18:36 عصر
خواهش می کنم.
ببینید ، بسه به نیاز داره ، هر کاری که با منطق ریاضی و 0 و 1 جور در بیاد قابل پیاده سازی هست ولی بعضی اوقات انقدر پیچیده می شه که از وقت و هزینه ما فرار تر می رود .
با کلاس های IO دات نت می شود یه فایل ایجاد کرد که در جریانش هستید ، حالا پسوند فایل رو CSS می گذارید و در یوز کنترل خودتون اون فایل رو از قبل هندل می کنید.
حالا در رویداد PageLoad با همون کلاس io بررسی می کنید که ایا فایل مد نظر سرجای خودش هست یا خیر؟ اگر پیاسخ false باشه در مرحله بعد یه فایل می سازه و در مسیر مربوطه قرار می دهد.
اگر هم که true باشه از همون فایل استفاده می کند.این فایل شامل کد های css مدر نظر شماست که با عملیات های شرطی می شه هوشمندش کرد که بروی مرورگر x رفتاری خاص انجام بده و بروی مروگر y رفتاری دیگر و یا... .
در قسمت مدیریت سایت هم می شه یه بخش ایجاد کرد برای تغییر استایل و اون فایل رو فراخونی بشه و ویرایش بشه و بعد در همان فایل ذخیره بشه ، این برای قابلیت تغییر یوزر کنترل توسط کاربر یا برنامه نویس های سطح 2 که نیابید از جزئیات و ساختار کار با خبر باشند.

کار های بسیار پیچیده تری رو دات نت پشتیبانی می کنه ، ولی می گم اینقدر این کارها دردسر داره و زمانبر هست که بعضی اوقات ترجیج می دیدم از همون امادش یا راه همه کس پسند و مرسوم استفاده کنیم.

clover
شنبه 13 خرداد 1391, 19:50 عصر
سلام


باین ترتیب راه منطقیش، ایجاد style بصورت inline هست؟ در این صورت، چطور میشه بعدا style رو عوض کرد؟
خب شما توی کد و با شرط استایل های در خط رو عوض می کنید دیگه، کاری که در کنترل های استاندارد Asp.Net مثل GridView هم انجام میشه.


من میخوام یه User Control داشته باشم در یه DLL که فایل CSS مخصوص خودش رو در دل DLL داشته باشه.
دوست عزیز
راه حل استفاده از Embedded Resource در dll مورد نظر هست.

1- فایل css مورد نظر رو به پروژه اضافه کنید.
2- بر روی فایل css مورد نظر کلیک راست کنید و Properties رو انتخاب کنید.
3- ویژگی Build Action رو به Embedded Resource تغییر بدید.
4- از پوشه ی Properties فایل AssemblyInfo.cs رو باز کنید و خط زیر رو اضافه کنید:

[assembly: System.Web.UI.WebResource("CustomControls.Styles.StyleSheet.css", "text/css", PerformSubstitution = true)]

پارامتر اول آدرس Resource شما در پروژه هست، دقت کنید که ابتدا نام Assembly و سپس آدرس فایل - به جای / از . استفاده کنید.
پارامتر دوم برای این هست که ابتدا آدرس بقیه منابع - از جمله عکس ها - محاسبه بشه و در فایل مربوطه قرار داده بشه.

5- در هر جایی از پروژه که نیاز به دسترسی به آدرس این Resource داشتید از این متد و به شکل زیر می تونیداستفاده کنید:

Page.ClientScript.GetWebResourceUrl(this.GetType() , "CustomControls.Styles.StyleSheet.css");

در آخر کافیه با یک شرط چک کنید که کاربر آدرس یک فایل خارجی رو داده یا نه - دقت کنید که این کار معمول نیست و کاربر نام استایل رو وارد می کنه - و بسته به نیاز فایل رو اضافه کنید یا نه:

HtmlLink link = new HtmlLink();
link.Attributes.Add("type", "text/css");
link.Attributes.Add("rel", "stylesheet");
link.Href = Page.ClientScript.GetWebResourceUrl(this.GetType() , "CustomControls.Styles.StyleSheet.css");
Page.Header.Controls.Add(link);

موفق باشید

website.expert
سه شنبه 24 بهمن 1391, 16:46 عصر
ممنون از توضیحتون،
من روشتون رو فعلاً انجام ندادم، ولی حتماً تست خواهم کرد.
یه چند تا سوال داشتم،اگه راهنمایی بفرمایید ممنون میشم :
من dll ندارم،فقط حدود 10 تا فایل جاوا اسکریپت که به صورت jquery نوشتم و یه فایل css که فقط یه کار مشخصی رو انجام میدن.
آیا میتونم از روش شما اونهارو به یه فایل dll تبدیل کنم؟!
هدفم اینه که dll رو به کسی اگه میدم به کدها دسترسی نداشته باشه(خصوصاً فایل های js)، حالا بعد از استفاده از dll آیا میشه با استفاده از ابزارهایی مثل firebug به کدها دسترسی داشت؟!
بعد چطور باید از متدهاش یا کلاً از اون dll استفاده کنم؟!
ممنون.

clover
چهارشنبه 25 بهمن 1391, 00:15 صبح
من dll ندارم،فقط حدود 10 تا فایل جاوا اسکریپت که به صورت jquery نوشتم و یه فایل css که فقط یه کار مشخصی رو انجام میدن.
آیا میتونم از روش شما اونهارو به یه فایل dll تبدیل کنم؟!

هدفم اینه که dll رو به کسی اگه میدم به کدها دسترسی نداشته باشه(خصوصاً فایل های js)، حالا بعد از استفاده از dll آیا میشه با استفاده از ابزارهایی مثل firebug به کدها دسترسی داشت؟!

بله می تونید اما این کار هیچ کمکی به شما نمی کنه چون محتوی فایل ها به راحتی در دسترس هست، برای هدفی که مد نظر دارید در مورد HTML Protector و CSS Protector سرچ کنید.

fakhravari
چهارشنبه 25 بهمن 1391, 15:33 عصر
این هم میتوان انجام داد؟
http://barnamenevis.org/showthread.php?382074-%D8%AA%D8%A8%D8%AF%DB%8C%D9%84-jquery-rss-%D8%A8%D9%87-DLL-%D8%AF%D8%B1-%D9%88%DB%8C%DA%98%D8%A7%D9%84-%D8%A7%D8%B3%D8%AA%D8%A7%D8%AF%DB%8C%D9%88

clover
چهارشنبه 25 بهمن 1391, 15:53 عصر
این هم میتوان انجام داد؟
بله طبق توضیحاتی که داده شد با کمی تغییر می تونید، اما اساسا چه نیازی هست؟ چرا باید به طور مثال جی کوئری رو به صورت ریسورس اضافه کنید؟

fakhravari
پنج شنبه 26 بهمن 1391, 00:44 صبح
با سلام
اگر تونستید اون سمپل درست کنید.