Я только что прошел этот процесс, и вот как мне удалось запустить его в рамках решения для песочницы, а также на сайте 365, вот весь пример кода:
Примечание: я использую VisualWebPart (песочница) в SharePoint Power Tools для Visual Studio
ToolPartTest.ascx:
<h3>Selected List</h3>
<dd><asp:Literal runat="server" ID="list" /></dd>
TooLPartTest.ascx.cs:
[WebBrowsable(true), Personalizable(true)]
public string ListName { get; set; }
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
InitializeControl();
}
protected void Page_Load(object sender, EventArgs e)
{
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
list.Text = ListName ?? "(None)";
}
public override EditorPartCollection CreateEditorParts()
{
return new EditorPartCollection(base.CreateEditorParts(),
new[]
{
new CustomEditorPart
{
ID = ID + "_editorPart"
}
}
);
}
ToolPart.cs
public class CustomEditorPart : EditorPart
{
private DropDownList _list;
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
_list = new DropDownList();
_list.AppendDataBoundItems = true;
_list.Items.Add("");
_list.DataTextField = "Title";
_list.DataValueField = "Title";
_list.DataSource = SPContext.Current.Site.RootWeb.Lists;
_list.DataBind();
Controls.Add(new LiteralControl("List: "));
Controls.Add(_list);
}
public override bool ApplyChanges()
{
EnsureChildControls();
if (!string.IsNullOrEmpty(_list.SelectedValue))
((ToolPartTest)WebPartToEdit).ListName = _list.SelectedValue;
return true;
}
public override void SyncChanges()
{
EnsureChildControls();
var webpart = ((ToolPartTest)WebPartToEdit);
_list.SelectedValue = webpart.ListName;
}
}