【问题标题】:CMS content editor / viewerCMS 内容编辑器/查看器
【发布时间】:2011-08-05 18:08:29
【问题描述】:

我们的一位用户决定他们需要能够在我们的主网站上编辑部分内容,而我的任务是实施它。底层模型是页面中的一个或多个 div 将从 CMS 填充其内容。

为了交付内容,我使用观察者模型来交付内容,这很好用。该页面包含(至少)3个服务器控件;数据提供者(CMS)、控制器(主体)和容器(观察者)。该容器将包含两个内容面板(编辑或视图)之一,这些面板将使用从控制器推送的数据适当地呈现在屏幕上。

但是,现在我需要能够在编辑器和查看器面板之间切换(以便可以预览更改)并能够将编辑的内容发布到数据提供程序 (CMS),但我一直丢失编辑的内容回发。我试图覆盖“SaveViewState”方法,但因为内容面板是在预渲染期间创建的(因为它取决于 ViewState 属性),所以控件集合始终显示之前创建的对象(即当编辑面板是显示时,控件集合中的对象是预览面板)。

我不想因为性能问题而同时渲染两个控件;我正在考虑创建一个三级组件(可能是一个隐藏字段)来存储编辑后的文本,但希望这里的某个人可能对如何构建它有更好的了解?

【问题讨论】:

    标签: c# asp.net viewstate composite-controls


    【解决方案1】:

    最好的办法是让编辑器成为一个单独的页面 - 将它们混为一谈会带来很多挑战,有点危险(你怎么知道公众不能编辑它)并且会产生长期维护问题。

    【讨论】:

    • 这是我最初的建议,但显然这不是所需要的......
    • 有一些创造性的方法可以解决这个问题。就像一个带有 iframe 的 ajax 弹出框。 . .
    【解决方案2】:

    看来你帮了我一个建议:

    如果用户是正确的用户级别,则在页面上具有正常视图和编辑视图。

    在普通视图下有一个按钮表示编辑,在编辑视图下有一个按钮称为预览。

    点击预览按钮时:

    $(".previewbutt").live("click",function(){ code to update database and update div content });
    

    上面的代码应该用于首先提交表单

    $.ajax({async:false, url:'',data:});
    

    然后再调用获取内容,更新正常显示的div,设置editordiv为隐藏

     $('.normalview').show('slow');
     $('.editor').hide('slow');
    

    会有一个简短的动画,但会涵盖所有基础。

    只是一个想法/选项

    【讨论】:

      猜你喜欢
      • 2010-09-26
      • 1970-01-01
      • 2021-10-09
      • 2011-04-09
      • 2020-05-19
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      • 2012-02-12
      相关资源
      最近更新 更多