gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:36:40 29 4
gpt4 key购买 nike

有人有在 asp.net MVC 3 中使用 XSLT 的经验吗?

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

一种解决方案是我们可以使用单独的布局页面,并通过设置动态属性 Viewbag 在运行时进行设置。但是如果我们想向页面添加新布局,这种方法需要重新编译。我在想,也许我们可以在运行时在 Controller 中动态加载 XSL,并在运行时将其绑定(bind)到模型对象。然后可以在页面的预定义部分中呈现 HTML 内容。

代码片段将是一个很大的帮助。

最佳答案

我刚刚建立了一个将 XML 转换为 HTML 以在 MVC3 中显示的站点。我使用了第二种技术, Controller 确定要使用的 XML 和 XSLT 文件,并将它们传递到模型中。 View 中的 HTML 助手实际上执行了转换。

在这种情况下,我正在渲染一个 session 程序,这就是 Program指下文。参数可以提供给样式表;下面,我提供了一个基本 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>();
}
}

Controller :
    [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);
}

helper :
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>

关于asp.net-mvc - 在 ASP .NET MVC 3 中使用 XSLT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7471391/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com