【问题标题】:SharePoint AJAX C# web part - visual layout of UpdatePanel controlsSharePoint AJAX C# Web 部件 - UpdatePanel 控件的可视化布局
【发布时间】:2010-12-28 20:00:40
【问题描述】:

我正在用 C# 创建一个 SharePoint Web 部件,它使用 UpdatePanel 来实现一些 AJAX 魔法。一切正常,但我想知道如何直观地布置我的控件(不使用 SharePoint Designer)。我只有两个下拉列表、一些标签、一个按钮和一个文本框。我在重写的 CreateChildControls 中创建它们。谢谢!

【问题讨论】:

    标签: c# ajax sharepoint user-interface web-parts


    【解决方案1】:

    在你的控件周围添加一个容器面板并给它一个类。将面板添加到 UpdatePanel 的容器中。将所有其他控件添加到新面板的控件中。

    您现在可以使用 css 进行样式设置,使用容器面板的 CssClass 作为参考。

    在代码中:

    protected override CreateChildControls()
    {
      // .. creation of updatepanel, say upd1
      Panel container = new Panel{CssClass = "webpartContainer"};
      upd1.ContentTemplateContainer.Controls.Add(container);
    
      container.Controls.Add(dropdown1); // etc. etc.
    }
    

    CSS:

    .webpartContainer
    {
      /* if needed add some style here also */
    }
    
    .webpartContainer select
    {
      /* add style */
    }
    
    .webpartContainer .specificClass
    {
      /* give controls a class of their own in CreateChildControls 
      if controls of the same type need different styling
      (i.e. you have more than 1 select that need to look different)  */
    }
    

    【讨论】:

    • 非常感谢您的回答。我真的很喜欢这个解决方案的优雅以及它避免使用表格的事实(我的背景是网页设计而不是开发,所以表格 = ick),但在这种情况下,我想避免使用额外的面板。不过,我确实对此表示赞同,因为我更喜欢它作为整体解决方案;我只是觉得在这种特殊情况下,另一种方式对我更有效。
    • 很高兴看到开发人员可以看到 CSS 中 C 的部分价值 :-D。不幸的是,使用 1 个容器作为开始元素来建立样式,从那里级联/指定,这并不是开发人员广泛使用的做法。上帝我讨厌内联样式属性.... :-D.
    • 这些做法没有得到更广泛的普及,这太糟糕了。我认为问题的根源在于开发人员/设计师之间的分歧。你不会发现很多开发人员会介意内联样式,而且设计人员通常没有足够深入的后端理解来正确解决这类问题。就像我说的,我喜欢这个解决方案,而且我肯定会使用它,以便将来可以将其合并,特别是当我不使用 SharePoint 时。再次感谢!
    【解决方案2】:

    有几种方法可以布置它们。您可以添加一个 Table 对象并添加行、单元格等,并将您的控件添加到单元格中。

    或者,您可以覆盖 RenderContents 方法并将 HTML 直接输出到作为参数传入的写入。如果您使用此方法(它可能比使用 Table 对象工作量更少且效率更高),您应该使用 StringBuilder 来构建您的 HTML,然后将结果输出到编写器。这种方法应该会给你带来一些性能。

    遗憾的是,这种方法没有可视化的 WYSIWIG 编辑器。

    【讨论】:

    • 感谢您的回复。我决定继续使用 Table 类,因为它会很快,而且我不太担心浏览器标准是否符合 SharePoint(考虑到默认门户页面当前通过 W3C 验证器抛出 277 错误)。
    【解决方案3】:

    很遗憾,没有针对以编程方式创建的 Web 部件的可视化设计器。

    您可以使用用户控件和来自 codeplex 的 SmartPart Web 部件来利用 .ascx 用户控件的可视化设计器。

    【讨论】:

      【解决方案4】:

      您可以在 Web 部件中使用 ASCX 文件。只需从 CreateChildControls 中的 Web 部件类加载它,如下所示:

      var control = Page.LoadControl("/_CONTROLTEMPLATES/yourproject/your.ascx");
      Controls.Add(control);
      

      通过这种方式,您可以使用 Visual Studio 的常规方式来布局您的 Web 部件。比在代码中构建 HTML 要好得多,至少可以说是痛苦的。

      (这也比使用导致信任级别和部署问题的 SmartPart 好得多)

      【讨论】:

        猜你喜欢
        • 2013-06-02
        • 1970-01-01
        • 2013-03-25
        • 1970-01-01
        • 2018-11-29
        • 2012-09-24
        • 1970-01-01
        • 2011-12-30
        • 2014-06-17
        相关资源
        最近更新 更多