asp.net-mvc – 在ASP .NET MVC 3中使用XSLT

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 在ASP .NET MVC 3中使用XSLT前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有人在asp.net MVC 3中使用XSLT的经验?

这里的目的是能够开发页面,其样式和布局可以在运行时根据某些条件进行更改.例如,用户个人资料.

一个解决方案是我们可以使用单独的布局页面,并通过设置动态属性Viewbag在运行时设置它.但是,如果我们想要向页面添加新布局,则此方法需要重新编译.我想可能是我们可以在运行时在控制器中动态加载XSL并在运行时将其绑定到模型对象.然后可以在页面中的预定义部分中呈现HTML内容.

代码片段将是一个很好的帮助.

解决方法

我刚建立了一个将 XML转换为HTML的站点,以便在MVC3中显示.我使用了第二种技术,控制器确定要使用的XML和XSLT文件,并在模型中传递它们.视图中的HTML帮助程序实际执行转换.

在这种情况下,我正在渲染一个会议程序,这就是程序在下面提到的内容.参数可以提供给样式表;下面,我提供了一个基本URL作为参数,将在生成的HTML中转换为链接.

该模型:

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>
原文链接:https://www.f2er.com/aspnet/247964.html

猜你在找的asp.Net相关文章