【问题标题】:How to create a editable property on a SharePoint 2010 Sandboxed Visual WebPart如何在 SharePoint 2010 沙盒可视 WebPart 上创建可编辑属性
【发布时间】:2011-08-08 16:39:57
【问题描述】:

我正在使用安装了 SharePoint powertools 的 Visual Studio 2010 中的 SharePoint 2010 开发沙盒可视化 Web 部件。 Web 部件按预期进行部署和工作,但属性不可编辑。我认为核心问题是 WebPartStorageAttribute 在沙盒中不可用,但无法找到有关如何创建具有可编辑属性的沙盒 Web 部件的指导。这甚至可能吗?

[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;
        }
    }
...

上面的代码有什么遗漏吗?是否可以创建可编辑的沙盒 Web 部件,如果可以,它是如何完成的?

【问题讨论】:

    标签: .net sharepoint-2010 web-parts sandbox


    【解决方案1】:

    我刚刚经历了这个过程,这就是我设法让它在沙盒解决方案和 365 网站下运行的方式,这是整个示例代码:

    注意:我在 Visual Studio 的 SharePoint Power Tools 中使用 Visual WebPart(沙盒)

    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;
    
      }
    }
    

    【讨论】:

    • 所以我必须创建一个工具部件,即使只是一个简单的文本框?
    • 我不认为你这样做,只要确保 [WebBrowsable(true), Personalizable(true)] 在属性上,它应该出现在工具部分的杂项部分。
    • 啊!你说得对!我并不认为实际上我确实需要它是可个性化的。我将努力使其可个性化,但仅限于共享范围内,我认为这是我所追求的。
    猜你喜欢
    • 2011-10-08
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 2012-01-08
    • 2012-06-29
    • 2015-03-30
    相关资源
    最近更新 更多