2011-04-19 55 views
3

我正在開發使用安裝了SharePoint powertools的Visual Studio 2010中的SharePoint 2010的沙盒視覺web部件。 webpart部署和按預期工作,但屬性不可編輯。我相信核心問題是WebPartStorageAttribute在沙箱中不可用,但尚未找到有關如何使用可編輯屬性創建沙盒Web部件的指導。這甚至有可能嗎?如何在SharePoint 2010沙盒Visual WebPart上創建可編輯屬性

[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部件,如果是這樣,它是如何完成的?

回答

2

我只是通過這一過程去了,這是我設法把它下一個沙盒解決方案上運行,也是一個365網站,這是整個示例代碼:

注:我使用Visual Web部件(沙盒)的SharePoint電動工具內的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; 

    } 
} 
+0

所以我必須創建一個toolpart,哪怕只是一個簡單的文本框? – 2012-05-11 12:09:54

+1

我不認爲你這樣做了,只要確保[WebBrowsable(true),Personalizable(true)]在屬性上,就應該出現在工具部分的雜項部分。 – 2012-05-11 13:35:20

+0

啊!你是對的!我沒有想過,實際上我確實需要它是個性化的。我會努力讓它變得個性化,但只能在共享範圍內,我認爲這是我所追求的目標。 – 2012-05-11 14:06:02

相關問題