在将页面返回到客户端

时间:2016-01-29 12:49:05

标签: asp.net webforms

概述

我们有一个内部CMS,我们最近添加了多语言支持。 CMS允许拖放各种面板(.net控件),一些面板显示通过富文本编辑器输入的动态内容。此外,某些字段是多语言的,因此某些面板内容将根据当前语言进行更改。 理想情况下,我们希望将语言添加到URL。因此/contact-us变为/en/contact-us。 然后我们的主要处理程序将设置语言,所有面板将显示相关副本。

目标

所以,理想情况下,我们希望能够:

  1. 在我们的主页汇编程序构建之后处理页面服务器端(例如在PreRender中)
  2. 解析构建的页面或递归控制树以更新所有内部链接
  3. 将lanauge代码预先添加到页面上的所有内部链接。 (一旦我们知道它们都在哪里就很容易了)
  4. 注意:某些链接将通过.net HyperLink控件进行,但其他链接将通过富文本编辑器输入<a>个标记。

    我看过

    的东西

    我已经浏览了谷歌,但没有发现任何符合我们需求的内容:

    • Html Agility Pack - 可用于获取URL并解析链接。但是我猜这个不能用在我们的主页面构建器的Pre_Render中。我猜想是刮刮的理想选择。

    • 各种JS解决方案 - 找到链接并更新。很容易,但我担心使用JS更新URL客户端。

    欢迎所有建议:)

2 个答案:

答案 0 :(得分:0)

所以,会有动态内容和静态内容。 CMS用户应该能够编辑它们。你应该有一个语言数据库表,例如;对于&#34;关于我们&#34;页面,应该有关于我们的EN,关于我们的DE,关于我们在其他表格中的FR行。

你应该有另一个静态内容表。例如对于contacy us form。联系表格上有静态文本。姓名,电子邮件,消息等。

答案 1 :(得分:0)

这可以通过覆盖Page.Render()来完成,如下所示:

protected override void Render(HtmlTextWriter htmlWriter)
{
    StringBuilder ThisSB = new StringBuilder();
    StringWriter ThisSW = new StringWriter(ThisSB);
    HtmlTextWriter RenderedPage = new HtmlTextWriter(ThisSW);

    // pass our writer to base.Render to generate page output
    base.Render(RenderedPage);

    // get rendered page as a string
    string PageResult = ThisSB.ToString();

    // modify the page
    string ModifiedPage = UpdatePage(PageResult);

    // write modified page to client
    htmlWriter.Write(ModifiedPage);
}

方法UpdatePage可以任意方式将页面操作为字符串 - 在我们的示例中,我们使用查找和更新所有链接和本地文件路径。