ASP.NET MVC + jqGrid嵌入式链接最佳实践

时间:2009-04-16 23:21:09

标签: jquery asp.net-mvc jqgrid

我有一个Mvc应用程序,我用jqGrid [XML]替换一些硬渲染表。

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

我打算查看RenderPartialExtensions但是你需要一个HtmlHelper实例,而且我正在使用brail视图引擎,所以我甚至不确定它是否会起作用。

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

提前感谢您的意见。

2 个答案:

答案 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)

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

  1. Business Objects
  2. VB XML De / Serialization library
  3. ASP.NET MVC项目
  4. 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视图(我对我的页面使用brail视图)[所以我可以使用ContentType页面属性将其设置为XML]。
    2. 将原始业务对象的集合作为模型数据传递。
    3. 循环模型集合,为视图中的每个发票构建actonHtml元素(因此获取我的HtmlHelper方法等)
    4. 要输出实际的业务元素,我可以简单地调用我的VB XML库并执行:invoice.ToXml().Elements().ToString()并且我很好。
    5. 为了进一步使这个可重用,我创建了一个jqGrid母版页,其中包含所有记录计数等内容区域,因此我可以在实际页面上传递该信息,只是担心输出元素数据。