Convert line breaks to break tags in Profile widgets read-mode template.
We need to be able to convert line breaks to html break tags when you display the data entered in the Users profile page under "about". I've tried going into the template and adding
<sf:TextField ID="about" runat="server" DataFieldName="About" Value='<%# (Eval("About")).ToString().Replace(System.Environment.NewLine, "<br />").Replace("\r\n" , "<br />").Replace("\r", "<br />").Replace("\n", "<br />") %>' DisplayMode="Read" Title="<%$ Resources:Labels, About %>" CssClass="sfprofileField sfprofileAbout" />Still no break tags displayed. Viewing source code of the profile page shows the text formatted correctly so the line break characters are being saved as part of the text in the database. I don't know of any reason why the above wouldn't work but it's not.
Does anybody have any idea what kind of line break characters the sitefinity textField is using? And how to convert them to html <br /> tags?
Hello,
For this you will have to customize Sitefinity TextField control to inject the logic for changiing the line breaks with <br/>. TextField outputs asp:TextBox control accessible trough TextBoxControl object, Set properties in ConstructControl method of a class inheriting from TextField.
protected override void ConstructControl() this.TitleLabel.Text = this.Title; this.DescriptionLabel.Text = this.Description; switch (this.DisplayMode) case FieldDisplayMode.Read: if (this.value != null) this.LabelControl.Text = this.Value as string; this.LabelControl.TabIndex = this.TabIndex; break; case FieldDisplayMode.Write: this.ExampleLabel.Text = this.Example; this.TitleLabel.AssociatedControlID = this.TextBoxControl.ID; if (this.value != null) //the TextBoxControl is the asp:TextBox rendered on the frontend apply logic agains this control this.TextBoxControl.Text = this.Value as string; this.TextBoxControl.Rows = this.Rows; if (this.IsPasswordMode) this.TextBoxControl.TextMode = TextBoxMode.Password; else if (this.Rows > 1) this.TextBoxControl.TextMode = TextBoxMode.MultiLine; this.ConfigureExpandableControl(this.ExpandableControlDefinition); this.TextBoxControl.TabIndex = this.TabIndex; if (!this.Expanded.GetValueOrDefault()) this.ExpandControl.TabIndex = this.TabIndex; this.TabIndex = 0; break; Hello Stanislav,
Thank you for your reply. I'm new to sitefinity so please forgive me if the answers to my questions should be obvious.
question 1: Why would my code at the top of this thread not work? If you view the source of the profile page you can see that the carriage returns entered in the TextField while in Write mode were persisted to the database. Because the source is correctly formatted. So what Kind of line breaks are you using that couldn't be replaced by the code I have above?
question 2: If I use your CustomTextField to resolve this issue. Where do I register it? I've looked through the advanced settings and I cannot find where it should be registered in sitefinity.
Thanks for your help.
Hello,
Excuse me I have missed the registration part of my previous reply.
1.Create a class in visual studio and place the code attached in my previous reply.
2.with the class created in the project edit the control template for prolfile and register the class with the line
<%@ Register TagPrefix="custom" Namespace="SitefinityWebApp" Assembly="SitefinityWebApp" %><custom:CustomTextField ID="about" runat="server" DataFieldName="About" Rows="12" DisplayMode="Write" Title="<%$ Resources:Labels, About %>" CssClass="sfprofileField sfprofileAbout" WrapperTag="li" /><%@ Control Language="C#" %> <%@ Register TagPrefix="custom" Namespace="SitefinityWebApp" Assembly="SitefinityWebApp" %><%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.Fields" Assembly="Telerik.Sitefinity" %><%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI" Assembly="Telerik.Sitefinity" %><sf:SitefinityLabel runat="server" id="successMessageLabel" Visible="false" WrapperTagName="div" HideIfNoText="false" CssClass="sfprofileSuccessMsg" /><fieldset id="formWrapper" runat="server" class="sfprofileEditFormWrp"> <sf:SitefinityLabel runat="server" id="errorLabel" Visible="false" WrapperTagName="div" HideIfNoText="false" CssClass="sfprofileFailureMsg" /> <asp:PlaceHolder ID="itemContainer" runat="server"> <ol class="sfprofileFieldsList"> <sf:TextField ID="firstName" runat="server" DataFieldName="FirstName" DisplayMode="Write" Title="<%$ Resources:Labels, FirstName %>" CssClass="sfprofileField sfprofileFirstName" WrapperTag="li" /> <sf:TextField ID="lastName" runat="server" DataFieldName="LastName" DisplayMode="Write" Title="<%$ Resources:Labels, LastName %>" CssClass="sfprofileField sfprofileLastName" WrapperTag="li" /> <sf:ImageField ID="predefinedImageField" runat="server" SizeInPx="100" DataFieldType="Telerik.Sitefinity.Model.ContentLinks.ContentLink" WrapperTag="li" DisplayMode="Write" ShowDeleteImageButton="false" DefaultSrc="~/SFRes/images/Telerik.Sitefinity.Resources/Images.DefaultPhoto.png" DataFieldName="Avatar" UploadMode="InputField" CssClass="sfprofileField sfprofileAvatar" /> <custom:CustomTextField ID="about" runat="server" DataFieldName="About" Rows="12" DisplayMode="Write" Title="<%$ Resources:Labels, About %>" CssClass="sfprofileField sfprofileAbout" WrapperTag="li" /> </ol> </asp:PlaceHolder> <div class="sfprofileLnkWrp"> <asp:Button runat="server" ID="saveChanges" Text="<%$ Resources:UserProfilesResources, SaveChanges %>" CssClass="sfprofileSaveLnk" /> <asp:HyperLink runat="server" ID="cancel" Text="<%$ Resources:UserProfilesResources, Cancel %>" CssClass="sfprofileCancelLnk" /> </div></fieldset>Gregg's solution in the template works fine for me. To me, this is a much better solution since it is tied directly to a specific widget template.