2011-09-19 13 views
7

क्या किसी को एएसपीनेट एमवीसी 3 में एक्सएसएलटी का उपयोग करने में अनुभव है?एएसपी में एक्सएसएलटी का उपयोग करना .NET एमवीसी 3

यहां इरादा उन पृष्ठों को विकसित करने में सक्षम होना है जिनके स्टाइल और लेआउट रनटाइम पर कुछ स्थितियों के आधार पर बदला जा सकता है। उदाहरण के लिए, उपयोगकर्ता प्रोफ़ाइल।

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

एक कोड स्निपेट एक बड़ी मदद होगी।

+0

क्या आपको इसके लिए समाधान मिला है? तुमने क्या किया? – XtremeBytes

उत्तर

16

मैंने अभी एक ऐसी साइट बनाई है जो एमवीसी 3 में प्रदर्शन के लिए एक्सएमएल को एचटीएमएल में बदल देती है। मैंने दूसरी तकनीक का उपयोग किया, जहां नियंत्रक एक्सएमएल और एक्सएसएलटी फाइलों का उपयोग करने के लिए निर्धारित करता है, और उन्हें मॉडल में पास करता है। दृश्य में एक HTML सहायक वास्तव में परिवर्तन करता है।

इस मामले में मैं एक सम्मेलन कार्यक्रम प्रस्तुत कर रहा हूं, इसलिए Program नीचे दिया गया है। पैरामीटर्स को स्टाइलशीट में आपूर्ति की जा सकती है; नीचे, मैं पैरामीटर के रूप में एक बेस यूआरएल की आपूर्ति कर रहा हूं जो जेनरेट किए गए एचटीएमएल में लिंक में बदल जाएगा।

मॉडल:

public class ProgramModel 
{ 
    public string ProgramFilename { get; set; } 
    public string StylesheetFilename { get; set; } 

    public Dictionary<string, string> Parameters { get; protected set; } 

    public ProgramModel() 
    { 
     Parameters = new Dictionary<string, string>(); 
    } 
} 

नियंत्रक:

[OutputCache(Duration=1000)] 
    public ActionResult Index() 
    { 
     string xmlFile = Server.MapPath("~/Program.xml"); 
     string xsltFile = Server.MapPath("~/Program-index.xslt"); 
     Response.AddCacheDependency(new CacheDependency(xmlFile), new CacheDependency(xsltFile)); 

     ProgramModel model = new ProgramModel(); 
     model.ProgramFilename = xmlFile; 
     model.StylesheetFilename = xsltFile; 
     model.Parameters["baseDayUrl"] = Url.Action("Day"); 

     return View(model); 
    } 

सहायक:

public static class HtmlHelperXmlExtensions 
{ 
    /// <summary> 
    /// Applies an XSL transformation to an XML document. 
    /// </summary> 
    public static HtmlString RenderXml(this HtmlHelper helper, string xmlPath, string xsltPath, IDictionary<string,string> parameters) 
    { 
     XsltArgumentList args = new XsltArgumentList(); 
     if (parameters != null) 
      foreach (string key in parameters.Keys) 
       args.AddParam(key, "", parameters[key]); 

     XslCompiledTransform t = new XslCompiledTransform(); 
     t.Load(xsltPath); 

     XmlReaderSettings settings = new XmlReaderSettings(); 
     settings.DtdProcessing = DtdProcessing.Parse; 
     settings.ValidationType = ValidationType.DTD; 

     using (XmlReader reader = XmlReader.Create(xmlPath, settings)) 
     { 
      StringWriter writer = new StringWriter(); 
      t.Transform(reader, args, writer); 
      return new HtmlString(writer.ToString()); 
     } 

    } 

} 

दृश्य:

<div data-role="content"> 
@Html.RenderXml(Model.ProgramFilename, Model.StylesheetFilename, Model.Parameters) 
</div> 
संबंधित मुद्दे