RadEditor.Content returning Empty
Hi, I created a User Control where the RadEditor.Content is returning Empty
COMMENTS.ASCX
<%@ Assembly Name="$SharePoint.Project.AssemblyFullName$" %><%@ Assembly Name="Microsoft.Web.CommandUI, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Register Tagprefix="Utilities" Namespace="Microsoft.SharePoint.Utilities" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Register Tagprefix="asp" Namespace="System.Web.UI" Assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" %><%@ Import Namespace="Microsoft.SharePoint" %> <%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UserControl1.ascx.cs" Inherits="Expertime.PublishingComments.CONTROLTEMPLATES.UserControl1" %><%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI, Version=2013.2.611.45, Culture=Neutral, PublicKeyToken=121fae78165ba3d4" %><%@Register TagPrefix="SharePointPortalControls" Namespace="Microsoft.SharePoint.Portal.WebControls" Assembly="Microsoft.SharePoint.Portal, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %><style type="text/css"> /* The following CSS needs to be copied to the page to produce textbox-like RadEditor */ .reWrapper_corner, .reWrapper_center display: none !important; .reLeftVerticalSide, .reRightVerticalSide, .reToolZone, .reToolCell background: white !important; .reContentCell border-width: 0 !important; .RadEditor filter: chroma(color=c2dcf0); </style><telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> <script type="text/javascript"> var currentLoadingPanel = null; var btSubmit = null; function RequestStart(sender, args) currentLoadingPanel = $find("<%= RadAjaxLoadingPanel1.ClientID%>"); btSubmit = "<%= panlcomments.ClientID %>"; //show the loading panel over the updated control currentLoadingPanel.show(btSubmit); function ResponseEnd() //hide the loading panel and clean up the global variables currentLoadingPanel.hide(btSubmit); //clear btSubmit.SetHtml(""); currentLoadingPanel = null; btSubmit = null; </script></telerik:RadCodeBlock><div class="ftv-wp-title"> <asp:Literal runat="server" ID="HeaderTitle"></asp:Literal> </div><telerik:RadAjaxManager ID="RadAjaxManager1" runat="server"> <AjaxSettings> <telerik:AjaxSetting AjaxControlID="btSubmit"> <UpdatedControls> <telerik:AjaxUpdatedControl ControlID="newCommentLiteral" LoadingPanelID="RadAjaxLoadingPanel1" /> <telerik:AjaxUpdatedControl ControlID="panlcomments" LoadingPanelID="RadAjaxLoadingPanel1" /> </UpdatedControls> </telerik:AjaxSetting> </AjaxSettings> <ClientEvents OnRequestStart="RequestStart" OnResponseEnd="ResponseEnd" /></telerik:RadAjaxManager><telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server" BackgroundPosition="Center" Skin="Vista"></telerik:RadAjaxLoadingPanel> <div class="ftv-content-social ftv-type2"> <div class="ftv-comments"> <a class="ftv-entry-comments" ><asp:Label runat="server" ID="NbCommentsLbl"/></a> </div> <div class="ftv-notes"> <a>Note</a> <SharePointPortalControls:AverageRatingFieldControl ID="PageRatingControl" FieldName="AverageRating" runat="server"/> </div></div><div class="Exp-Comments" id="ExpComments"> <asp:Literal ID="existingComments" runat="server"></asp:Literal></div> <asp:Literal ID="newCommentLiteral" runat="server"></asp:Literal><!-- on masque le control pour les anonymes --> <asp:Panel ID="panlcomments" runat="server"> <div class="exp-comment-message" style="display: none;"> <asp:Label Visible="false" ID="lblMessage" Text="Messages :" runat="server"></asp:Label></div> <div class="ftv-wp-title ftv-reagir">laissez un commentairex</div> <div class="ftv-reagir-comment"> <telerik:RadEditor ID="reComment" runat="server" EditModes="Design" ToolbarMode="ShowOnFocus" ToolsWidth="170px" Width="412px" Height="72px"> <Tools> <telerik:EditorToolGroup> <telerik:EditorTool Name="Bold" /> <telerik:EditorTool Name="Italic" /> <telerik:EditorTool Name="StrikeThrough" /> <telerik:EditorTool Name="Underline" /> <telerik:EditorTool Name="InsertUnorderedList" /> <telerik:EditorTool Name="InsertOrderedList" /> </telerik:EditorToolGroup> </Tools> </telerik:RadEditor> <span class="exp-bout-comm"> <asp:Button ID="btSubmit" runat="server" Text="Valider" OnClick="btSubmit_Click" /></span> <%--<span class="exp-bout-comm"><asp:Button ID="btSubmit" runat="server" Text="Valider" OnClick="btSubmit_Click" CssClass="Exp-Comment-Submit"/></span>--%> </div></asp:Panel> <asp:Panel ID="pnelAnonyme" runat="server"></asp:Panel>using System;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Collections.Generic;using System.Linq;using System.Text;using System.Web;using Microsoft.SharePoint;using Microsoft.SharePoint.Publishing;using Telerik.Web.UI;using System.Data; namespace Expertime.PublishingComments.CONTROLTEMPLATES public partial class UserControl1 : UserControl #region Controls private string _ValidationGroupId; private ValidationSummary _ErrorContainer; private ScriptManager _AjaxManager; #endregion #region vars & cons const string CommentListUrl = "ExpertimePublishingComments", CommentListTitle = "Expertime Comments"; const string ExpertimePublishingCommentSiteFeatureId = "68af5cec-59a1-4105-97a7-3fb7b68fbf46"; const string FieldName_ListItemId = "ListItemId", FieldName_CommentBody = "CommentBody"; #endregion #region properties public ScriptManager AjaxManager get return _AjaxManager; set _AjaxManager = value; #endregion protected override void CreateChildControls() base.CreateChildControls(); if (ScriptManager.GetCurrent(Page) == null) ScriptManager sMgr = new ScriptManager(); Page.Form.Controls.AddAt(0, sMgr); string formOnSubmitAtt = this.Page.Form.Attributes["onsubmit"]; try if (!string.IsNullOrEmpty(formOnSubmitAtt) && formOnSubmitAtt == "return _spFormOnSubmitWrapper();") Page.Form.Attributes["onsubmit"] = "_spFormOnSubmitWrapper();"; catch try //if (btSubmit == null) // btSubmit = this.FindControl("btSubmit") as Button; //if (reComment == null) // reComment = this.FindControl("reComment") as RadEditor; //if (existingComments == null) // existingComments = this.FindControl("existingComments") as Literal; //if (gv1 == null) // gv1 = this.FindControl("gv1") as GridView; //if (newCommentLiteral == null) // newCommentLiteral = this.FindControl("newCommentLiteral") as Literal; GetExistingComments(); catch (Exception exc) existingComments.Text = string.Format("<span class=\"Exp-Error\">0</span>", exc.Message); if (SPContext.Current.Web.CurrentUser == null) panlcomments.Visible = false; pnelAnonyme.Visible = true; else panlcomments.Visible = true; pnelAnonyme.Visible = false; if (!this.Controls.Contains(_ErrorContainer)) _ValidationGroupId = Guid.NewGuid().ToString(); _ErrorContainer = new ValidationSummary(); _ErrorContainer.ID = "_ErrorContainer"; _ErrorContainer.ValidationGroup = _ValidationGroupId; _ErrorContainer.BorderStyle = BorderStyle.Solid; _ErrorContainer.BorderWidth = Unit.Pixel(3); _ErrorContainer.BorderColor = System.Drawing.Color.Red; this.Controls.Add(_ErrorContainer); Literal HeaderTitle = this.FindControl("HeaderTitle") as Literal; if (HeaderTitle == null) throw new ArgumentNullException("le controle HeaderTitle n'existe pas"); if (HttpContext.Current.User.Identity.IsAuthenticated) HeaderTitle.Text = "Réagir"; else HeaderTitle.Text = "<div class='ftv-wp-title ftv-title-separator'>Réagir</div>" + "<div class='ftv-offline'><a><h6>Connectez-vous</h6> pour réagir</a></div>"; private void GetExistingComments() Guid siteId = SPContext.Current.Site.ID, webId = SPContext.Current.Web.ID; SPSecurity.RunWithElevatedPrivileges(delegate() using (SPSite elevatedSite = new SPSite(siteId)) using (SPWeb elevatedWeb = elevatedSite.OpenWeb(webId)) try string prefixUrl = elevatedWeb.ServerRelativeUrl == "/" ? "/" : elevatedWeb.ServerRelativeUrl + "/"; SPList commentList = elevatedWeb.GetList(prefixUrl + CommentListUrl); SPQuery query = new SPQuery(); string queryString = @"<OrderBy> <FieldRef Name=""Created"" Ascending=""True"" /> </OrderBy> <Where> <Eq> <FieldRef Name=""ListItemId"" /> <Value Type=""Text"">0</Value> </Eq> </Where>"; query.Query = string.Format(queryString, SPContext.Current.ListItem.UniqueId.ToString()); SPListItemCollection items = commentList.GetItems(query); StringBuilder sb = new StringBuilder(); var NbCommentsLbl = this.FindControl("NbCommentsLbl") as Label; if (NbCommentsLbl == null) throw new ArgumentNullException("le controle NbCommentsLbl n'existe pas"); if (items.Count <= 1) NbCommentsLbl.Text = String.Format("0 commentaire", items.Count.ToString()); else NbCommentsLbl.Text = String.Format("0 commentaires", items.Count.ToString()); // SPField fieldListItemId = commentList.Fields.GetFieldByInternalName(FieldName_ListItemId); SPField fieldCommentBody = commentList.Fields.GetFieldByInternalName(FieldName_CommentBody); SPField fieldCreatedBy = commentList.Fields.GetFieldByInternalName("Author"); SPField fieldCreated = commentList.Fields.GetFieldByInternalName("Created"); foreach (SPListItem item in items) sb.Append("<div class=\"Exp-Comment\">"); sb.Append("<div class=\"Exp-Comment-Header\">"); sb.Append("<div class=\"Exp-Comment-Author\">"); SPFieldUserValue fieldValue = fieldCreatedBy.GetFieldValue(item[fieldCreatedBy.Id].ToString()) as SPFieldUserValue; string userDisplayName = fieldValue.User.Name; sb.AppendFormat("<a style=\"cursor:text; TEXT-DECORATION: none;\">Publié par 0</a>", userDisplayName); sb.Append("</div>"); sb.Append("<div class=\"Exp-Comment-Date\">"); sb.Append(item[fieldCreated.Id].ToString()); sb.Append("</div>"); sb.Append("</div>"); sb.Append("<div class=\"Exp-Comment-Body\">"); sb.Append(item[fieldCommentBody.Id].ToString()); sb.Append("</div>"); sb.Append("</div>"); existingComments.Text = sb.ToString(); catch //la liste n'existe pas StringBuilder sb = new StringBuilder(); sb.Append("<div id=\"ExpComments\" class=\"Exp-Comments\">"); sb.Append("<div class=\"Exp-Comments-Number\"><span class=\"Exp-Comments-Number-Span\" >"); sb.AppendFormat("0 commentaire ", "0"); sb.Append("</span></div>"); sb.Append("</div>"); existingComments.Text = sb.ToString(); ); protected void btSubmit_Click(object sender, EventArgs e) try SPSecurity.RunWithElevatedPrivileges(delegate() using (SPSite elevatedSite = new SPSite(SPContext.Current.Site.Url)) using (SPWeb elevatedWeb = elevatedSite.OpenWeb(SPContext.Current.Web.ServerRelativeUrl)) if (reComment.Content.Trim() != "") SPList commentList = null; try string prefixUrl = elevatedWeb.ServerRelativeUrl == "/" ? "/" : elevatedWeb.ServerRelativeUrl + "/"; commentList = elevatedWeb.GetList(prefixUrl + CommentListUrl); catch //if the comment list cannot be found we create it if (commentList == null) elevatedWeb.AllowUnsafeUpdates = true; Guid newListId = elevatedWeb.Lists.Add(CommentListTitle, "", CommentListUrl, ExpertimePublishingCommentSiteFeatureId, 100, "", SPListTemplate.QuickLaunchOptions.Off); commentList = elevatedWeb.Lists[newListId]; elevatedWeb.AllowUnsafeUpdates = false; SPList list = commentList; elevatedWeb.AllowUnsafeUpdates = true; //creating the comment item SPListItem newComment = list.Items.Add(); SPField fieldListItemId = list.Fields.GetFieldByInternalName(FieldName_ListItemId); SPField fieldCommentBody = list.Fields.GetFieldByInternalName(FieldName_CommentBody); SPField fieldCreatedBy = list.Fields.GetFieldByInternalName("Author"); newComment[fieldListItemId.Id] = SPContext.Current.ListItem.UniqueId.ToString(); newComment[fieldCommentBody.Id] = reComment.Content; SPFieldUserValue val = new SPFieldUserValue(SPContext.Current.Web, SPContext.Current.Web.CurrentUser.ID, SPContext.Current.Web.CurrentUser.LoginName); newComment[fieldCreatedBy.Id] = val; newComment.SystemUpdate(); elevatedWeb.AllowUnsafeUpdates = false; //updating the new comment in the display StringBuilder sb = new StringBuilder(); sb.Append("<div class=\"Exp-Comment\">"); sb.Append("<div class=\"Exp-Comment-Header\">"); sb.Append("<div class=\"Exp-Comment-Author\">"); string userDisplayName = SPContext.Current.Web.CurrentUser.Name; string userEmail = SPContext.Current.Web.CurrentUser.Email; sb.AppendFormat("<a style=\"cursor:text; TEXT-DECORATION: none;\">1</a>", userEmail, userDisplayName); sb.Append("</div>"); sb.Append("<div class=\"Exp-Comment-Date\">"); sb.Append(DateTime.Now.ToLongDateString()); sb.Append("</div>"); sb.Append("</div>"); sb.Append("<div class=\"Exp-Comment-Body\">"); sb.Append(reComment.Content); sb.Append("</div>"); sb.Append("</div>"); newCommentLiteral.Text = sb.ToString(); //reComment.Content = string.Empty; //btSubmit.Visible = false; //reComment.Visible = false; //btSubmit.Visible = false; //lblMessage.Visible = false; ); catch public void RegisterError(string message) if (this.Controls.Contains(_ErrorContainer)) //this way of generating a unique control id is used in some of the OOB web parts int uniqueCounter; if (HttpContext.Current.Items["GetUniqueControlId"] != null) uniqueCounter = (int)HttpContext.Current.Items["GetUniqueControlId"]; else uniqueCounter = 0; uniqueCounter++; HttpContext.Current.Items["GetUniqueControlId"] = uniqueCounter; //create a custom validator to register the current error message with the ValidationSummary control CustomValidator cv = new CustomValidator(); cv.ID = string.Concat("_Error_", uniqueCounter); cv.ValidationGroup = _ValidationGroupId; cv.Display = ValidatorDisplay.None; cv.IsValid = false; cv.ErrorMessage = message; this.Controls.Add(cv); else //if RegisterError is called before the CreateChildControls override in AjaxBasePart then transfer the user to an error page using the SPUtility Microsoft.SharePoint.Utilities.SPUtility.TransferToErrorPage("The CreateChildControls function of the AjaxBasePart has not been called. You probably need to add \"base.CreateChildControls()\" to the top of your CreateChildControls override."); //protected void Page_Load(object sender, EventArgs e) // //