澄清更多架构以及我最终如何解决它。我有以下项目/程序集:
- 业务对象
- VB XML 反序列化库
- 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 方法等。所以我最终如何以“正确”的方式解决它:
- 使用 WebForms 视图(我的页面使用盲文视图)[所以我可以使用 ContentType 页面属性将其设置为 XML]。
- 将我的原始业务对象的集合作为模型数据传递。
- 循环模型集合,为视图中的每个发票构建 actonHtml 元素(因此得到我的 HtmlHelper 方法等)
- 要输出实际的业务元素,我可以简单地调用我的 VB XML 库并执行以下操作:
invoice.ToXml().Elements().ToString()
我很好。
为了进一步提高它的可重用性,我创建了一个 jqGrid 母版页,其中包含所有记录计数等内容区域,因此我可以将这些信息传递到实际页面上,而只需担心输出元素数据。