2012-02-06 64 views
4

我一直在試圖弄清楚是否可以通過編程方式從ASP.NET代碼隱藏在服務器端按鈕點擊打開Sitecore媒體庫瀏覽器。通過搜索網絡,我發現從Sitecore縮略圖點擊an example which explained how to open a media library browser。我在ASP.NET服務器端按鈕點擊時嘗試了這種方法,但它沒有與object reference not set to an instance of an object一起失敗。以asp.net按鈕編程打開sitecore媒體庫點擊

任何人都可以請幫助我,如果你知道如何通過服務器端按鈕點擊模式對話框中打開Sitecore媒體瀏覽器?

我的代碼:

protected void btnShowMediaPopup_Click(object sender, EventArgs e) 
{ 
    Database masterDb = Factory.GetDatabase("master"); 
    UrlString url = new UrlString(UIUtil.GetUri("control:Sitecore.Shell.Applications.Media.MediaBrowser")); 

    Item folderItem = masterDb.GetItem("/sitecore/media library/Images"); 
    url["ro"] = folderItem.Uri.ToString(); 

    SheerResponse.ShowModalDialog(url.ToString(), true); 
} 

回答

1

我找到了解決辦法。步驟如下:

a。創建的配置文件 「MediaBrowser.config」 並添加到文件夾APP_CONFIG /包含(配置下面XML):

<configuration xmlns:patch= "http://www.sitecore.net/xmlconfig/"> 
    <sitecore> 
     <commands> 
      <command name="example:MediaBrowser" type="SitecoreTraining.HelperClasses.MediaBrowser,SitecoreTraining" /> 
     </commands> 
    </sitecore> 
</configuration> 

灣在我的ascx控制標記中添加了以下內容以打開媒體瀏覽器:

<A class="scChromeCommand" title="Open Media Browser" onclick="javascript:Sitecore.PageModes.ChromeManager.postRequest('example:MediaBrowser(id=<%# Sitecore.Context.Item.ID.ToString() %>)',null,false)" href="#"><IMG alt="Open Media Browser" src="http://localhost:2438/temp/IconCache/applications/16x16/photo_scenery.png" width="16" height="16" /></A> 

c。創建繼承了以下主要方法Sitecore的Command類使用的MediaBrowser類:

公共覆蓋無效執行(CommandContext上下文) {

 Item item = context.Items.Length == 0 ? Context.Item : context.Items[0]; 
     contextItem = item; 

     var parameters = new NameValueCollection(); 

     wizardPipeline = Context.ClientPage.Start(this, "Run", parameters); 
    } 

受保護的虛擬無效的run(ClientPipelineArgs參數) {

 Database masterDb = Factory .GetDatabase("master");  
     if (args.IsPostBack)  
     {   
      var itemID = args.Result; 
     }  
     else  
     {   
      UrlString url = new UrlString (UIUtil .GetUri("control:Sitecore.Shell.Applications.Media.MediaBrowser")); 

      Item folderItem = masterDb.GetItem("/sitecore/media library/Images");   
      url["ro" ] = folderItem.Uri.ToString();     
      SheerResponse.ShowModalDialog(url.ToString(), true);   
      args.WaitForPostBack(true);  
     } 
    }