Page Selector Field pulling from PagesService
<%@ Control Language="C#" AutoEventWireup="true" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI" TagPrefix="sf" %>
<
sf:ResourceLinks
ID
=
"resourcesLinks"
runat
=
"server"
>
<
sf:ResourceFile
JavaScriptLibrary
=
"JQuery"
>
</
sf:ResourceFile
>
</
sf:ResourceLinks
>
<
div
id
=
"control-wrapper"
>
<
ul
id
=
"pageList"
runat
=
"server"
>
</
ul
>
</
div
>
<
sf:GenericCollectionBinder
ID
=
"pageListBinder"
runat
=
"server"
TargetId
=
"pageList"
ServiceUrl
=
"~/Sitefinity/Services/Pages/PagesService.svc/"
BindOnLoad
=
"false"
DataKeyNames
=
"Id"
DataMembers
=
"PageLiveUrl, Title"
>
<
containers
>
<
sf:BinderContainer
ID
=
"pageTitleContainer"
runat
=
"server"
RenderContainer
=
"true"
ContainerTag
=
"li"
>
<
a
href
=
"javascript:void(0);"
class
=
"sf_binderCommand_selectImage"
>
Title
</
a
>
</
sf:BinderContainer
>
</
containers
>
</
sf:GenericCollectionBinder
>
Type.registerNamespace("SandboxSitefinity.PageSelector");
SandboxSitefinity.PageSelector.SimplePageSelector = function (element)
SandboxSitefinity.PageSelector.SimplePageSelector.initializeBase(this, [element]);
this._binder = null;
this._onLoadDelegate = null;
this._onUnloadDelegate = null;
this._binderCommandDelegate = null;
this._selectedPageUrl = null;
this._originalServiceBaseUrl = null;
SandboxSitefinity.PageSelector.SimplePageSelector.prototype =
initialize: function ()
SandboxSitefinity.PageSelector.SimplePageSelector.callBaseMethod(this, "initialize");
this._onLoadDelegate = Function.createDelegate(this, this._onLoad);
Sys.Application.add_load(this._onLoadDelegate);
this._onUnloadDelegate = Function.createDelegate(this, this._onUnload);
Sys.Application.add_unload(this._onUnloadDelegate);
this._binderCommandDelegate = Function.createDelegate(this, this._binderCommand);
,
dispose: function ()
SandboxSitefinity.PageSelector.SimplePageSelector.callBaseMethod(this, "dispose");
Sys.Application.remove_load(this._onLoadDelegate);
if (this._onLoadDelegate)
delete this._onLoadDelegate;
//
Sys.Application.remove_load(this._onUnloadDelegate);
if (this._onUnloadDelegate)
delete this._onUnloadDelegate;
//
if (this._binderCommandDelegate != null)
delete this._binderCommandDelegate;
,
_onLoad: function (sender, args)
this._originalServiceBaseUrl = this.get_binder().get_serviceBaseUrl();
this.get_binder().add_onItemCommand(this._binderCommandDelegate);
this.get_binder().DataBind();
,
_onUnload: function (sender, args)
this.get_binder().remove_onItemCommand(this._binderCommandDelegate);
,
_binderCommand: function (sender, args)
alert(args.get_commandName());
if (args.get_commandName() == "selectPage")
var pageUrl = args.get_dataItem().PageLiveUrl;
var pageTitle = args.get_dataItem().Title;
this.set_selectedPageUrl(pageUrl);
this.set_selectedPageTitle(pageTitle);
// remove class from previously selected pages
var selected = jQuery(args.get_itemElement().parentNode).find(".sf_selectedPage").each(function (index, element)
jQuery(element).removeClass("sf_selectedPage");
);
// set class to currently selected page
jQuery(args.get_itemElement()).addClass("sf_selectedPage");
,
/* -------------------- private methods ----------- */
/* -------------------- properties ---------------- */
get_binder: function ()
return this._binder;
,
set_binder: function (value)
this._binder = value;
,
get_selectedPageTitle: function()
return this._selectedPageTitle;
,
set_selectedPageTitle: function (value)
this._selectedPageTitle = value;
,
get_selectedPageUrl: function ()
return this._selectedPageUrl;
,
set_selectedPageUrl: function (value)
this._selectedPageUrl = value;
,
;
SandboxSitefinity.PageSelector.SimplePageSelector.registerClass("SandboxSitefinity.PageSelector.SimplePageSelector", Sys.UI.Control);
Type : System.Web.HttpException, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
Message : This is an invalid webresource request.
Source : System.Web
Help link :
WebEventCode : 0
ErrorCode : -2147467259
Data : System.Collections.ListDictionaryInternal
TargetSite : Void System.Web.IHttpHandler.ProcessRequest(System.Web.HttpContext)
Stack Trace : at System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Additional Info:
MachineName :
TimeStamp : 26/01/2012 20:32:32
FullName : Telerik.Sitefinity.Utilities, Version=4.4.2117.0, Culture=neutral, PublicKeyToken=b28c218413bdf563
AppDomainName : 7d4a8850-1-129720835026875677
ThreadIdentity : admin
WindowsIdentity :
Requested URL : http://localhost:60877/WebResource.axd?d=6fVoQP6PwW0WPuXQ1HmkTyq-h5mkFzArID-BxWhMRcvy5VvHHEdVuavwxyEz0_tIROgEaKOaQiTU4CMZdTRtridpl6fQio035kyPpcBQuz2Up3m3Z8llWlf4U_nnkVHI9eGk4aROta3Ej45jmR1sa31ua85Vx63oLiPkXitHgk6WDf2QRpQAsBPSsETNdILy0&t=634631887012115677
Category: ErrorLog
Priority: 0
EventId: 90000
Severity: Error
Title:Enterprise Library Exception Handling
Machine:
App Domain: 7d4a8850-1-129720835026875677
ProcessId: 1236
Process Name: C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0\WebDev.WebServer40.exe
Thread Name:
Win32 ThreadId:3320
Extended Properties:
Hello,
It would be easier to just use our PageField to select pages. Here's a very good example by Josh Morales that includes PageField inside a designer:
http://www.sitefinity.com/blogs/joshmorales/posts/11-10-05/selecting_sitefinity_4_content_inside_widget_designers.aspx
You can download the source and look through it. If you have any questions or difficulties, do not hesitate to write back.
Ya, I'm having some difficulty following the code. I'm just not understanding how to set up my field to use the PageField that already exists...
Looking at the code example, I see that there is a Widget and a Designer (which I believe that I'm wanting to use the designer since I'm going to be using it as a field and a dialog for when a user modifies a list item).
<%@ Control Language="C#" AutoEventWireup="true" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.Fields" TagPrefix="sf" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI" TagPrefix="sitefinity" %>
<
sf:FormManager
ID
=
"formManager"
runat
=
"server"
/>
<
asp:Label
ID
=
"titleLabel"
runat
=
"server"
Text
=
"Title Test"
/>
<
asp:Label
ID
=
"descriptionLabel"
runat
=
"server"
Text
=
"Description Test"
CssClass
=
"sfSelectedItem"
/>
<
asp:Label
ID
=
"exampleLabel"
runat
=
"server"
Text
=
"Example Test"
CssClass
=
"sfSelectedItem"
/>
<
sitefinity:SitefinityLabel
id
=
"pageUrl"
runat
=
"server"
/>
<
telerik:RadWindowManager
ID
=
"windowManager"
runat
=
"server"
Skin
=
"Sitefinity"
>
<
Windows
>
<
telerik:RadWindow
ID
=
"selectorWindow"
Width
=
"600"
Height
=
"400"
NavigateUrl
=
"~/Sitefinity/Dialog/PageSelectorFieldDialog"
runat
=
"server"
ReloadOnShow
=
"true"
Modal
=
"true"
VisibleStatusbar
=
"false"
Behaviors
=
"Close"
>
</
telerik:RadWindow
>
</
Windows
>
</
telerik:RadWindowManager
>
<
asp:LinkButton
ID
=
"openSelector"
runat
=
"server"
class
=
"sfLinkBtn sfChange"
>
<
strong
class
=
"sfLinkBtnIn"
>
Change
</
strong
>
</
asp:LinkButton
>
<
sf:PageField
ID
=
"PageSelector"
runat
=
"server"
WebServiceUrl
=
"~/Sitefinity/Services/Pages/PagesService.svc/"
DisplayMode
=
"Write"
/>
[FieldDefinitionElement(typeof(PageSelectorFieldElement))]
public class PageSelectorField : PageField
#region Properties
/// <
summary
>
/// Gets the name of the layout template.
/// </
summary
>
/// <
value
>The name of the layout template.</
value
>
protected override string LayoutTemplateName
get
return String.Empty;
/// <
summary
>
/// Gets or sets the layout template path.
/// </
summary
>
/// <
value
>The layout template path.</
value
>
public override string LayoutTemplatePath
get
return "~/SandboxSitefinity/SandboxSitefinity.PageSelectorField.PageSelectorField.ascx";
set
base.LayoutTemplatePath = value;
#endregion
#region Overrides
public override IEnumerable<
ScriptDescriptor
> GetScriptDescriptors()
var descriptors = new List<
ScriptDescriptor
>();
var scriptDescriptor = (ScriptControlDescriptor)base.GetScriptDescriptors().Last();
descriptors.Add(scriptDescriptor);
return descriptors.ToArray();
public override IEnumerable<
ScriptReference
> GetScriptReferences()
string assemblyName = typeof(PageSelectorField).Assembly.FullName;
var scripts = new List<
ScriptReference
>(base.GetScriptReferences())
new ScriptReference(PageSelectorField._pageSelectorFieldScript, assemblyName)
;
return scripts.ToArray();
#endregion
#region Fields
private const string _pageSelectorFieldScript = "SandboxSitefinity.PageSelectorField.PageSelectorField.js";
#endregion
protected void Application_Start(object sender, EventArgs e)
Bootstrapper.Initialized +=new EventHandler<
Telerik.Sitefinity.Data.ExecutedEventArgs
>(Bootstrapper_Initialized);
protected void Bootstrapper_Initialized(object sender, Telerik.Sitefinity.Data.ExecutedEventArgs e)
this.InstallCustomVirtualPaths();
private void InstallCustomVirtualPaths()
ConfigManager manager = ConfigManager.GetManager();
var virtualPathConfig = manager.GetSection<
VirtualPathSettingsConfig
>();
ConfigManager.Executed += new EventHandler<
Telerik.Sitefinity.Data.ExecutedEventArgs
>(ConfigManager_Executed);
#region Sandbox Sitefinity Virtual Path
var sandboxVirtualPathConfig = new VirtualPathElement(virtualPathConfig.VirtualPaths)
VirtualPath = "~/SandboxSitefinity/*",
ResolverName = "EmbeddedResourceResolver",
ResourceLocation = "SandboxSitefinity"
;
if (!virtualPathConfig.VirtualPaths.ContainsKey("~/SandboxSitefinity/*"))
virtualPathConfig.VirtualPaths.Add(sandboxVirtualPathConfig);
manager.SaveSection(virtualPathConfig);
#endregion
Hello Miles,
I attached a sample for a field control with a page selector. Please look through it and let me know if you have any questions on the implementation.
Please note that you need to register the virtual paths, used by the control and also register the dialogue in your Global.asax:
protected
void
Application_Start(
object
sender, EventArgs e)
Bootstrapper.Initialized +=
new
EventHandler<Telerik.Sitefinity.Data.ExecutedEventArgs>(Bootstrapper_Initialized);
void
Bootstrapper_Initialized(
object
sender, Telerik.Sitefinity.Data.ExecutedEventArgs e)
Telerik.Sitefinity.Web.UI.Dialogs.RegisterDialog<PageSelectorDialog>();
Awesome. Thanks a bunch.