【问题标题】:Sharepoint web part dynamic number of controlsSharepoint Web 部件动态控件数量
【发布时间】:2013-07-25 16:02:00
【问题描述】:

背景

我正在设计一个自动完成搜索 Web 部件以添加到现有网站。这是概念:

我需要在 Web 部件上为每个实体类型列表设置一个复选框。实体类型列表是从数据库中提取的。这些复选框将定义 Web 部件将搜索的实体。

示例

因此,例如,我可能将教师、学生、学校和班级作为我的实体列表。用户应该看到其中每一个的复选框。或者,我可能只有教师和班级作为类型。在这种情况下,用户应该只能看到这两个复选框。

所以如果我提前知道需要多少个复选框,我可以这样做:

[WebBrowsable(true)]
[WebDescription("Teachers")]
[WebDisplayName("Teachers")]
[Personalizable(PersonalizationScope.Shared)]
public bool SearchByTeachers { get; set; }

[WebBrowsable(true)]
[WebDescription("Classes")]
[WebDisplayName("Classes")]
[Personalizable(PersonalizationScope.Shared)]
public bool SearchByClasses { get; set; }

但显然我不能这样做,因为我不知道我需要多少。


TL;DR

我在实现方面不需要任何帮助,我只想知道如何在 Web 部件上拥有动态数量的控件,因为它们是由 Web 部件类的属性驱动的。

【问题讨论】:

  • 首先,我已经有大约四年没有做过Sharepoint 开发了,所以我试图回想一下大约15 个开发项目。我们遇到了类似的问题,似乎我们最终得到的解决方案是在 webpart 中使用 Flags Enum 属性,该属性由 webpart 连接设置到显示复选框的第二个 webpart。

标签: c# asp.net sharepoint web-parts


【解决方案1】:

SharePoint WebPart 只是 ASP.NET 控件。

您可以通过Controls 集合动态添加控件。没有什么可以阻止您建立数据库连接/读取 xml 配置文件/等以获取控件的源代码。

例子:

this.Controls.Add(new Checkbox() { Text = "Hit me"});

【讨论】:

  • 但是我将如何控制持久性和配置等?
  • 将配置 Web 部件所需的任何内容放入数据库中,然后在 CreateChildControls() 方法中,根据数据库中的内容添加所需的控件。您可以在 webpart 属性中存储 <connectionStrings> 元素的密钥,以获取 web.config 中的连接字符串。
  • 但是,当用户单击“编辑 Web 部件”时,如何显示复选框?这不是完全由 Web 部件类的属性决定的吗?
  • 对不起,也许我应该澄清一点。这些复选框需要在编辑模式下可见,而不是向最终用户显示自己
  • 您可以使用if (WebPartManager.DisplayMode == System.Web.UI.WebControls.WebParts.EditDisplayMode) { // Do something } - 然后将每个用户的配置信息存储在一个表中以保持它
猜你喜欢
  • 2015-06-30
  • 2011-01-07
  • 1970-01-01
  • 2010-12-01
  • 2011-06-16
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
相关资源
最近更新 更多