Как создать редактируемое свойство в изолированной визуальной веб-части SharePoint 2010

Я разрабатываю изолированную визуальную веб-часть с помощью SharePoint 2010 в Visual Studio 2010 с установленными инструментами Powertools SharePoint. Веб-часть развертывается и работает, как ожидалось, за исключением того, что свойства нельзя редактировать. Я считаю, что основная проблема заключается в том, что WebPartStorageAttribute недоступен в песочнице, но мне не удалось найти руководство по созданию изолированной веб-части с редактируемыми свойствами. Это вообще возможно?

[ToolboxItem(false)]
[XmlRoot(Namespace="MyNamespace")]
public partial class MyWebPart: System.Web.UI.WebControls.WebParts.WebPart
{
     const string  defaultStartTime = "00:30:00";
     private string _startTime = "00:30:00";

    [Browsable(true)]
    [WebBrowsable(true)]
    [Category("Timer")]
    [Description("Start time to use if the user has not set a different one.")]
    [XmlElement(ElementName="StartTime")]
    [DefaultValue(defaultStartTime)]
    [FriendlyName("Start Time")]       
    public string  StartTime
    {
        get
        {
            return _startTime;
        }
        set
        {
            _startTime = value;
        }
    }
...

Что-то не хватает в приведенном выше коде? Можно ли создать редактируемую изолированную веб-часть, и если да, то как это делается?


person Daniel    schedule 19.04.2011    source источник


Ответы (1)


Я только что прошел через этот процесс, и вот как мне удалось запустить его в песочнице, а также на сайте 365, это весь пример кода:

Примечание. Я использую Visual WebPart (SandBoxed) в составе 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;

  }
}
person Francisco Aquino    schedule 29.08.2011
comment
Итак, мне нужно создать инструментальную часть, даже если просто для простого текстового поля? - person Andy Burns; 11.05.2012
comment
Я не думаю, что вы это делаете, просто убедитесь, что в свойстве указаны [WebBrowsable (true), Personalizable (true)], они должны появиться в разделе «Разное» на панели инструментов. - person Francisco Aquino; 11.05.2012
comment
Ах! Ты прав! Я бы не подумал, что на самом деле мне нужно, чтобы он был персонализированным. Я буду работать над тем, чтобы сделать его персонализированным, но только в области общего доступа, что, как мне кажется, мне и нужно. - person Andy Burns; 11.05.2012