Add widget to login page
I am attempting to recreate a site that was created in version 3 to the most current version. An issue that I am running across is that in version 3, there was an easier way to add a widget/control to the login page as well as be able to style more than the background area. I installed the starter kit and it only allows me to style the background. I cannot find a login.aspx page on either installation. Version 3 allowed me to make changes using the login.aspx or login.aspx.cs pages. How can I make these same changes in version 4?
Hi Brian,
Yes, it's possible to achieve this functionality in 4.x as well, you can customize the login page by mapping the template for LoginForm. Please find below the default templates that we're using for LoginForm:
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI"
TagPrefix="sitefinity" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Web.UI.Fields"
TagPrefix="sffields" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>
<%@ Control Language="C#" %>
<
sitefinity:ResourceLinks
ID
=
"resourcesLinks"
runat
=
"server"
>
<
sitefinity:ResourceFile
JavaScriptLibrary
=
"JQuery"
>
</
sitefinity:ResourceFile
>
</
sitefinity:ResourceLinks
>
<
sitefinity:ClientLabelManager
id
=
"clientLabelManager"
runat
=
"server"
>
<
Labels
>
<
sitefinity:ClientLabel
ClassId
=
"Labels"
Key
=
"SelfLogoutUserConfirm"
runat
=
"server"
/>
<
sitefinity:ClientLabel
ClassId
=
"Labels"
Key
=
"UserNotSelected"
runat
=
"server"
/>
<
sitefinity:ClientLabel
ClassId
=
"Labels"
Key
=
"LogoutUserConfirm"
runat
=
"server"
/>
</
Labels
>
</
sitefinity:ClientLabelManager
>
<
sffields:FormManager
runat
=
"server"
id
=
"formManager"
/>
<
asp:Panel
ID
=
"loginPanel"
runat
=
"server"
>
<
div
class
=
"sfForm"
>
<
div
class
=
"sfFormIn"
>
<
div
class
=
"sfLoginShadowTopRight"
>
</
div
>
<
div
class
=
"sfLoginShadowBottomLeft"
>
</
div
>
<
h2
>
<
asp:Literal
ID
=
"LoginTitle"
Text="<%$ Resources:Labels, LoginToManage %>" runat="server" />
</
h2
>
<
asp:Label
runat
=
"server"
ID
=
"FailureText"
EnableViewState
=
"False"
Visible
=
"false"
CssClass
=
"sfFailure"
/>
<
ol
>
<
li
id
=
"ProvidersHolder"
runat
=
"server"
>
<
asp:Label
ID
=
"ProvidersLabel"
Text="<%$ Resources:Labels, Provider %>" AssociatedControlID="ProvidersList"
runat="server" CssClass="sfTxtLbl" />
<
asp:DropDownList
ID
=
"ProvidersList"
AutoPostBack
=
"false"
AccessKey
=
"l"
runat
=
"server"
/>
</
li
>
<
li
>
<
asp:Label
ID
=
"UserNameLabel"
Text="<%$ Resources:Labels, Username %>" AssociatedControlID="UserName"
runat="server" CssClass="sfTxtLbl" />
<
asp:TextBox
ID
=
"UserName"
AccessKey
=
"u"
runat
=
"server"
CssClass
=
"sfTxt"
/>
<
asp:RequiredFieldValidator
ID
=
"UserNameRequired"
Display
=
"Dynamic"
ControlToValidate
=
"UserName"
ValidationGroup
=
"LoginBox"
ErrorMessage="<%$ Resources:Labels, UsernameCannotBeEmpty %>"
CssClass="sfValidator" runat="server">
<
strong
><
asp:Literal
ID
=
"UserNameRequiredLiteral"
runat
=
"server"
Text="<%$ Resources:Labels, UsernameCannotBeEmpty %>" /></
strong
>
</
asp:RequiredFieldValidator
>
</
li
>
<
li
>
<
asp:Label
ID
=
"PasswordLabel"
Text="<%$ Resources:Labels, Password %>" AssociatedControlID="Password"
runat="server" CssClass="sfTxtLbl" />
<
asp:TextBox
ID
=
"Password"
TextMode
=
"Password"
AccessKey
=
"p"
runat
=
"server"
CssClass
=
"sfTxt"
/>
<
asp:RequiredFieldValidator
ID
=
"PasswordRequired"
Display
=
"Dynamic"
ControlToValidate
=
"Password"
ValidationGroup
=
"LoginBox"
ErrorMessage="<%$ Resources:Labels, PasswordCannotBeEmpty %>"
CssClass="sfValidator" runat="server">
<
strong
><
asp:Literal
ID
=
"PasswordRequiredLiteral"
runat
=
"server"
Text="<%$ Resources:Labels, PasswordCannotBeEmpty %>" /></
strong
>
</
asp:RequiredFieldValidator
>
</
li
>
<
li
class
=
"sfCheckBoxWrapper"
>
<
asp:CheckBox
runat
=
"server"
ID
=
"RememberMe"
/>
<
asp:Label
ID
=
"RememberMeTextLabel"
Text="<%$ Resources:Labels, RememberMe %>" AssociatedControlID="RememberMe"
runat="server" />
</
li
>
</
ol
>
<
p
class
=
"sfSubmitBtn sfMainFormBtns"
>
<
asp:LinkButton
ID
=
"LoginButton"
CommandName
=
"Login"
CssClass
=
"sfLinkBtn sfSave"
ValidationGroup
=
"LoginBox"
runat
=
"server"
>
<
strong
class
=
"sfLinkBtnIn"
>
<
asp:Literal
ID
=
"LoginButtonLiteral"
runat
=
"server"
Text="<%$ Resources:Labels, LoginCaps %>"></
asp:Literal
>
</
strong
>
</
asp:LinkButton
>
<!-- do not remove this button. It is used for the default form submit (pressing enter) -->
<
div
style
=
"display: none;"
>
<
asp:Button
ID
=
"hiddenSubmitButton"
runat
=
"server"
CommandName
=
"Login"
ValidationGroup
=
"LoginBox"
/>
</
div
>
</
p
>
</
div
>
</
div
>
</
asp:Panel
>
<
asp:Panel
ID
=
"userListPanel"
runat
=
"server"
Visible
=
"false"
>
<
div
class
=
"sfForm"
>
<
div
class
=
"sfFormIn"
>
<
div
class
=
"sfLoginShadowTopRight"
></
div
>
<
div
class
=
"sfLoginShadowBottomLeft"
></
div
>
<
h2
><
asp:Literal
ID
=
"UsersListPanelLoginTitle"
Text="<%$ Resources:Labels, LoginToManage %>" runat="server" /></
h2
>
<
p
class
=
"sfNeutral"
><
asp:Literal
ID
=
"userLimitLabel"
runat
=
"server"
Text="<%$ Resources:Labels, UserLimitLabel%>" /></
p
>
<
sffields:ChoiceField
runat
=
"server"
id
=
"userListChoice"
RenderChoicesAs
=
"RadioButtons"
DisplayMode
=
"Write"
/>
<
p
class
=
"sfSubmitBtn sfMainFormBtns"
>
<
asp:LinkButton
ID
=
"logoutButton"
runat
=
"server"
OnClientClick
=
"return AlertLogOut();"
CssClass
=
"sfLinkBtn sfPrimary"
>
<
strong
class
=
"sfLinkBtnIn"
>
<
asp:Literal
ID
=
"LogoutButtonLiteral"
runat
=
"server"
Text="<%$ Resources:Labels, LogoutButtonText%>"></
asp:Literal
>
</
strong
>
</
asp:LinkButton
>
</
p
>
</
div
>
</
div
>
</
asp:Panel
>
<
asp:Panel
ID
=
"selfLogoffPanel"
runat
=
"server"
Visible
=
"false"
>
<
div
class
=
"sfForm"
>
<
div
class
=
"sfFormIn"
>
<
div
class
=
"sfLoginShadowTopRight"
></
div
>
<
div
class
=
"sfLoginShadowBottomLeft"
></
div
>
<
h2
><
asp:Literal
ID
=
"SelfLogoffPanelLoginTitle"
Text="<%$ Resources:Labels, LoginToManage %>" runat="server" /></
h2
>
<
p
class
=
"sfNeutral"
><
asp:Literal
ID
=
"selfLogoffLabel"
runat
=
"server"
Text="<%$ Resources:Labels, SelfLogoffLabel%>" /></
p
>
<
p
class
=
"sfSubmitBtn sfMainFormBtns"
>
<
asp:LinkButton
ID
=
"selfLogoutButton"
runat
=
"server"
OnClientClick
=
"return AlertSelfLogOut();"
CssClass
=
"sfLinkBtn sfPrimary"
>
<
strong
class
=
"sfLinkBtnIn"
>
<
asp:Literal
ID
=
"LogoutOtherUserAndEnterLiteral"
runat
=
"server"
Text="<%$ Resources:Labels, SelftLogoutButtonText%>"></
asp:Literal
>
</
strong
>
</
asp:LinkButton
>
<
asp:LinkButton
ID
=
"selfLogoutCancelButton"
runat
=
"server"
Text="<%$ Resources:Labels, Cancel%>" CssClass="sfCancel" />
</
p
>
</
div
>
</
div
>
</
asp:Panel
>
<
asp:Panel
ID
=
"denyLogonPanel"
runat
=
"server"
Visible
=
"false"
>
<
div
class
=
"sfForm"
>
<
div
class
=
"sfFormIn"
>
<
div
class
=
"sfLoginShadowTopRight"
></
div
>
<
div
class
=
"sfLoginShadowBottomLeft"
></
div
>
<
h2
><
asp:Literal
ID
=
"DenyLogonPanelLoginTitle"
Text="<%$ Resources:Labels, LoginToManage %>" runat="server" /></
h2
>
<
p
class
=
"sfNeutral"
><
asp:Literal
ID
=
"denyLogonMesage"
runat
=
"server"
Text="<%$ Resources:Labels, DenyLogonMesage%>" /></
p
>
<
p
><
asp:Literal
ID
=
"loginRetryMessage"
runat
=
"server"
Text="<%$ Resources:Labels, LoginRetryMessage%>" /></
p
>
</
div
>
</
div
>
</
asp:Panel
>
<
asp:PlaceHolder
ID
=
"loginLinksHolder"
runat
=
"server"
>
<
div
class
=
"sfLoginHelp"
>
<
asp:Literal
ID
=
"HelpTitleLiteral"
runat
=
"server"
Text="<%$ Resources:Labels, Help %>" />:
<
a
id
=
"PasswordRecoveryLink"
href
=
"~/Sitefinity/Login/PasswordRecovery"
runat
=
"server"
onclick
=
"toggleSmtpErrorMessage();"
>
<
asp:Literal
ID
=
"PasswordRecoveryTextLiteral"
runat
=
"server"
Text="<%$ Resources:Labels, ForgotYourPassword %>" />
</
a
>
<
a
id
=
"ChangePasswordLink"
href
=
"~/Sitefinity/Login/ChangePassword"
runat
=
"server"
onclick
=
"toggleSmtpErrorMessage();"
>
<
asp:Literal
ID
=
"ChangePasswordTextLiteral"
runat
=
"server"
Text="<%$ Resources:Labels, ChangePassword %>" />
</
a
>
<
a
id
=
"CreateUserLink"
href
=
"~/Sitefinity/Login/Register"
runat
=
"server"
>
<
asp:Literal
ID
=
"RegisterUserTextLiteral"
runat
=
"server"
Text="<%$ Resources:Labels, Register %>" />
</
a
>
<
a
id
=
"HelpLink"
href
=
"~/Sitefinity/Help/UsersAndRoles/LoggingIn"
runat
=
"server"
>
<
asp:Literal
ID
=
"HelpLinkLiteral"
runat
=
"server"
Text="<%$ Resources:Labels, Help %>" />
</
a
>
</
div
>
</
asp:PlaceHolder
>
<
div
id
=
"smtpNotSetContainer"
class
=
"sfNeutral sfDetailedInfo"
style
=
"display:none;"
>
<
h3
>
<
asp:Literal
ID
=
"ErrorMessageNoSmtpConfigLiteral"
runat
=
"server"
Text="<%$ Resources:ErrorMessages, TheSystemHasNotBeenConfiguredToSendEmails %>" />
</
h3
>
<
ul
>
<
li
><
asp:Literal
ID
=
"ErrorMessageContactAdminToResetYourPasswordLiteral"
runat
=
"server"
Text="<%$ Resources:ErrorMessages, ContactAnAdministratorToResetYourPasswordManually %>" /></
li
>
<
li
>
<
asp:Literal
ID
=
"ErrorOrAskAnAdministratorToConfigureTheSystemLiteral"
runat
=
"server"
Text="<%$ Resources:ErrorMessages, OrAskAnAdministratorToConfigureThSystem %>" />
<
a
href
=
"javascript:void(0)"
onclick
=
"toggleVisibility('smtpNotSetSolution')"
>
<
asp:Literal
ID
=
"ErrorMessageSmtpDetailsTitle"
runat
=
"server"
Text="<%$ Resources:ErrorMessages, Details %>" />
</
a
>
</
li
>
</
ul
>
<
div
id
=
"smtpNotSetSolution"
class
=
"sfDetailedHowTo"
style
=
"display: none; "
>
<
p
><
asp:Literal
ID
=
"ErrorMessageSmtpSettingsNotSetLiteral"
runat
=
"server"
Text="<%$ Resources:ErrorMessages, SmtpSettingsAreNotSet %>" /></
p
>
<
h3
><
asp:Literal
ID
=
"ErrorMessageHowToSetSmtpLiteral"
runat
=
"server"
Text="<%$ Resources:ErrorMessages, HowToSetSMTP %>" /></
h3
>
<
ol
>
<
li
><
asp:Literal
ID
=
"Literal20"
runat
=
"server"
Text="<%$ Resources:ErrorMessages, GoToSettingsConfiguration %>" /></
li
>
<
li
><
asp:Literal
ID
=
"Literal21"
runat
=
"server"
Text="<%$ Resources:ErrorMessages, SelectSystemSMTPSettings %>" /></
li
>
</
ol
>
</
div
>
</
div
>
<
div
id
=
"smtpPermissionDeniedContainer"
class
=
"sfNeutral sfDetailedInfo"
style
=
"display:none;"
>
<
h3
>
<
asp:Literal
ID
=
"ErrorMessageTheSysIsNotPermittedToSendEmailsLiteral"
runat
=
"server"
Text="<%$ Resources:ErrorMessages, TheSystemHasIsNotPermittedToSendEmails %>" />
</
h3
>
<
ul
>
<
li
><
asp:Literal
ID
=
"ErrorMessageContactAdminToResetYourPasswordSmtpLiteral"
runat
=
"server"
Text="<%$ Resources:ErrorMessages, ContactAnAdministratorToResetYourPasswordManually %>" /></
li
>
<
li
>
<
asp:Literal
ID
=
"ErrorOrAskAnAdministratorToConfigureTheSystemSmtpLiteral"
runat
=
"server"
Text="<%$ Resources:ErrorMessages, OrAskAnAdministratorToConfigureThSystem %>" />
<
a
href
=
"javascript:void(0)"
onclick
=
"toggleVisibility('smtpPermissionsDeniedDetails')"
>
<
asp:Literal
ID
=
"ErrorMessageSmtpPermissionDeniedDetailsTitle"
runat
=
"server"
Text="<%$ Resources:ErrorMessages, Details %>" />
</
a
>
</
li
>
</
ul
>
<
div
id
=
"smtpPermissionsDeniedDetails"
class
=
"sfDetailedHowTo"
style
=
"display: none; "
>
<
p
><
asp:Literal
ID
=
"SmtpPermissionErrorMessage"
runat
=
"server"
/></
p
>
</
div
>
</
div
>
<
asp:HiddenField
id
=
"logoutUser"
runat
=
"server"
value
=
""
/>
<
asp:HiddenField
id
=
"loginTicket"
runat
=
"server"
value
=
""
/>
<
asp:HiddenField
id
=
"mode"
runat
=
"server"
value
=
""
/>
<
asp:HiddenField
id
=
"smtpSettingsAreSet"
runat
=
"server"
value
=
""
/>
<
asp:HiddenField
id
=
"smtpPermissionDenied"
runat
=
"server"
value
=
""
/>
<
telerik:RadCodeBlock
runat
=
"server"
>
<
script
type
=
"text/javascript"
>
var userChoices;
var smtpSettingsAreSet;
var smtpPermissionDenied;
function pageLoad()
userChoices = $find("<%= userListChoice.ClientID %>");
smtpSettingsAreSet = getBooleanHiddenField("<%= smtpSettingsAreSet.ClientID %>");
smtpPermissionDenied = getBooleanHiddenField("<%= smtpPermissionDenied.ClientID %>");
function getBooleanHiddenField(id)
var field = $get(id);
if (field !== null && field.value)
return Boolean.parse(field.value);
return false;
function toggleVisibility()
var elem = arguments[0] ? document.getElementById(arguments[0]) : this;
if (elem.style.display == "block")
elem.style.display = "none";
else
elem.style.display = "block";
function toggleSmtpErrorMessage()
if (!smtpSettingsAreSet)
toggleVisibility('smtpNotSetContainer');
else if (smtpPermissionDenied)
toggleVisibility('smtpPermissionDeniedContainer');
function AlertSelfLogOut()
var clientLabelManager = $find('<%= clientLabelManager.ClientID %>');
var result = confirm(clientLabelManager.getLabel('Labels', 'SelfLogoutUserConfirm'));
return result;
function AlertLogOut()
var clientLabelManager = $find('<%= clientLabelManager.ClientID %>');
var value = userChoices.get_value();
if (value == null || value.length == 0)
alert(clientLabelManager.getLabel('Labels', 'UserNotSelected'));
return false;
var selectedItemId = userChoices.get_value(); // selectedItem[0].id;
var result = confirm(clientLabelManager.getLabel('Labels', 'LogoutUserConfirm'));
if (result)
$get('<%= logoutUser.ClientID %>').value = value;
return result;
</
script
>
</
telerik:RadCodeBlock
>