I have been trying to figure out if it is possible to open the Sitecore media library browser programmatically from ASP.NET code-behind on a server-side button click. By sea
I found a solution. Steps as follows:
a. Created config file "MediaBrowser.config" and added into folder App_Config/Include (configuration xml below):
<configuration xmlns:patch= "http://www.sitecore.net/xmlconfig/"> <sitecore> <commands> <command name="example:MediaBrowser" type="SitecoreTraining.HelperClasses.MediaBrowser,SitecoreTraining" /> </commands> </sitecore> </configuration>
b. In my ascx control markup added the following to open the media browser:
<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. Created a MediaBrowser class that inherits the sitecore Command class with the following main methods used:
public override void Execute(CommandContext context) {
Item item = context.Items.Length == 0 ? Context.Item : context.Items[0]; contextItem = item; var parameters = new NameValueCollection(); wizardPipeline = Context.ClientPage.Start(this, "Run", parameters); }
protected virtual void Run(ClientPipelineArgs args) {
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 ); } }