2009-05-15 10 views
5

मैं किसी उपयोगकर्ता को वेबसाइट के लिए पृष्ठभूमि रंग चुनने और डेटाबेस में चयनित रंग को सहेजने देना चाहता हूं। जब व्यक्ति पृष्ठभूमि में लॉग इन सही रंग प्रदर्शित किया जाएगा।एएसपी.नेट एमवीसी - डायनामिक स्टाइल शीट

निम्नलिखित website के आधार पर, मैं CssHandler.ashx फ़ाइल के भीतर रंग सेट करने में सक्षम हूं। लेकिन, डेटाबेस से जानकारी प्राप्त करने का सबसे अच्छा तरीका क्या है?

साइट मास्टर पेज,

<link href="../../Content/CSSHandler.ashx?file=Site.css" rel="stylesheet" type="text/css" /> 

Site.css,

header 
{ 
    background-color:#BG_COLOR#; 
} 

CssHandler.ashx,

public class CssHandler : IHttpHandler 
{ 

    public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "text/css"; 

     // Get the file from the query stirng 
     string File = context.Request.QueryString["file"]; 

     // Find the actual path 
     string Path = context.Server.MapPath(File); 

     // Limit to only css files 
     if (System.IO.Path.GetExtension(Path) != ".css") 
      context.Response.End(); 

     // Make sure file exists 
     if (!System.IO.File.Exists(Path)) 
      context.Response.End(); 

     // Open the file, read the contents and replace the variables 
     using (System.IO.StreamReader css = new System.IO.StreamReader(Path)) 
     { 
      string CSS = css.ReadToEnd(); 
      CSS = CSS.Replace("#BG_COLOR#","Blue"); 
      context.Response.Write(CSS); 
     } 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

उत्तर

0

मुझे लगता है कि एक बेहतर रास्ता साथ एक सीएसएस फ़ाइल के लिए किया जाएगा विभिन्न वर्गों और कक्षा के नाम को आपके शरीर टैग के माध्यम से पास करें:

.black {background:#000} 
.blue {background:#00f} 

और इसलिए यह <body class="black> renders या एक नया WebControl कि <body> के रूप में renders बनाने (और यह एक प्रतिपादन विकल्प है कि संदर्भ के लिए लग रहा है बाहर काम करने के लिए यह क्या कर किया जाना चाहिए दे या तो स्क्रिप्ट के लिए एक रास्ता बॉडी टैग पाते हैं।

इन तरीकों से आप अपने सभी सीएसएस को एक ही स्थान पर रख सकते हैं और आपको एक विशेष कक्षा के रंग को बदलने के लिए वास्तविक कोड को संपादित करने की आवश्यकता नहीं है, आप बस सीएसएस संपादित करें।

1

अच्छा, आपके पोस्ट कार्यान्वयन के अनुरूप रखने के लिए, मैं कहूंगा कि आपको सीएसएस फ़ाइल नाम को हैंडलर में पास करने की आवश्यकता नहीं है। बस उपयोगकर्ता के आईडी को सत्र से बाहर खींचें और फ़ाइल से पढ़ने के बजाय डेटाबेस को उनके पृष्ठभूमि रंग के लिए पूछें। वैकल्पिक रूप से, यदि आप अज्ञात उपयोगकर्ताओं को रंग चुनने की अनुमति देना चाहते हैं, तो बस इसे एक कुकी में संग्रहीत करें जिसे हैंडलर चेक करता है।

तो, की जगह ...

// Get the file from the query stirng 
string File = context.Request.QueryString["file"]; 

साथ ...

// Get user ID from session 
int userId = Convert.ToInt32(Session["UserId"])); 
// Now, pull background color from database 

या ...

// Get background color preference from cookie 
HttpCookie cookie = Request.Cookies["Preferences"]; 
string bgColor = cookie["BackgroundColor"]; 

और वहां से चले जाते हैं।

2

एकाधिक सीएसएस फाइलें बनाना और < लिंक को प्रतिस्थापित करना> निर्देश बहुत बेहतर, प्रदर्शन के अनुसार है।

नीचे की ओर आपको कई सीएसएस फाइलों को बनाए रखने की आवश्यकता होगी जो सभी अलग-अलग रंगों के साथ एक ही चीज़ करते हैं। तो मैं क्या करूँगा सामान्य सीएसएस फ़ाइल बनाएं। फिर प्रत्येक संभावित कॉन्फ़िगरेशन (पृष्ठभूमि रंग, आपके पास क्या है) के लिए, अपनी स्वयं की सीएसएस फ़ाइल बनाएं। // संयोजनों की उचित संख्या

इस तरह, क्लाइंट कैश करेंगे, और वेबसर्वर स्थिर फ़ाइलों की सेवा करेगा।

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