我有一个Mvc应用程序,我用jqGrid [XML]替换一些硬渲染表。
问题是我的一个列中有操作链接以对行执行某些操作。我在我的XML中使用CDATA标签重复这些;但问题是现在这个标签是在一个动作方法中生成的,所以所有的HTML都在我的控制器中(在TagBuilder中),这显然不是很好。
我打算查看RenderPartialExtensions但是你需要一个HtmlHelper实例,而且我正在使用brail视图引擎,所以我甚至不确定它是否会起作用。
其他人如何处理此问题?
我想我可以创建一个视图,使实际的xml像html一样,但是我需要为每个xml数据源创建一个视图,我已经拥有了这些视图。
提前感谢您的意见。
答案 0 :(得分:0)
我不确定你要问的是什么,但我有一些XML数据 - 豁免,发行等的法律术语 - 我在我的观点中呈现。我使用了HtmlHelper扩展路由并创建了一个扩展,它接受文档的URL和将其转换为HTML的XSLT样式表。我使用LINQ XML类在MemoryStream中加载和呈现XML到HTML。然后它将此作为字符串返回,该字符串通过视图写入响应。如果您无权访问HTML帮助程序,则可以在静态类(无论是扩展程序是什么)上编写类似于静态方法的内容,但不能使用扩展语法。这可以在您喜欢的任何视图中呈现。
我的代码示例:
<%= Html.RenderXML( Url.Content( "~/App_Data/waiver.xml" ),
Url.Content( "~/Content/styles/waiver.xsl" ) ) %>
答案 1 :(得分:0)
澄清更多的架构以及我最终如何解决它。我有以下项目/程序集:
VB XML程序集处理序列化仅处理业务(#1)模型的业务对象。所以我会输出一个像这样的XElement:
<invoice>
<invoiceId>1234</invoiceId>
<customer>Hudsucker Industries</customer>
<otherBusinessData>etc, etc</otherBusinessData>
</invoice>
问题出现了我正在使用jqGrid,我需要为每个发票添加元素到某些操作,所以我需要这样的东西:
<invoice>
<actionHtml><![CDATA[ ...some HTML such as links... ]]></actionHtml>
<invoiceId>1234</invoiceId>
<customer>Hudsucker Industries</customer>
<otherBusinessData>etc, etc</otherBusinessData>
</invoice>
我得到了它的工作,但我不得不在控制器中生成所有的actionHtml,这显然不是一个很好的关注点分离,我丢失了所有的HtmlHelper方法等等。所以我最终以“正确”的方式解决了这个问题:
invoice.ToXml().Elements().ToString()
并且我很好。为了进一步使这个可重用,我创建了一个jqGrid母版页,其中包含所有记录计数等内容区域,因此我可以在实际页面上传递该信息,只是担心输出元素数据。