0

我有一个 Mvc 应用程序,我用 jqGrid [XML] 替换了一些硬呈现的表。

问题是我的其中一列中有操作链接,可以对行执行某些操作。我在我的 XML 中使用 CDATA 标记复制了这些;但是问题是现在这个标签是在一个动作方法中生成的,所以所有的 HTML 都在我的控制器中(在 TagBuilder 中),这绝对不是很好。

我打算研究 RenderPartialExtensions 但你需要一个 HtmlHelper 实例,另外我正在使用 brail 视图引擎,所以我什至不确定它是否会工作。

其他人是如何处理这个问题的?
我想我可以创建一个像 html 一样呈现实际 xml 的视图,但是我需要为每个 xml 数据源创建一个视图,并且我已经有了这些。

预先感谢您的意见。

4

2 回答 2

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" ) ) %>
于 2009-04-17T02:25:18.897 回答
0

澄清更多架构以及我最终如何解决它。我有以下项目/程序集:

  1. 业务对象
  2. VB XML 反序列化库
  3. ASP.NET MVC 项目

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 方法等。所以我最终如何以“正确”的方式解决它:

  1. 使用 WebForms 视图(我的页面使用盲文视图)[所以我可以使用 ContentType 页面属性将其设置为 XML]。
  2. 将我的原始业务对象的集合作为模型数据传递。
  3. 循环模型集合,为视图中的每个发票构建 actonHtml 元素(因此得到我的 HtmlHelper 方法等)
  4. 要输出实际的业务元素,我可以简单地调用我的 VB XML 库并执行以下操作:invoice.ToXml().Elements().ToString()我很好。

为了进一步提高它的可重用性,我创建了一个 jqGrid 母版页,其中包含所有记录计数等内容区域,因此我可以将这些信息传递到实际页面上,而只需担心输出元素数据。

于 2009-04-19T23:22:27.483 回答