BlogPost Details View Custom Template Post Back Data Loss
Hi,
I have created a custom template for the blog post details view.
Within the custom template I have two custom links for paging to the next post and previous post.
When I submit the comment form, if the comment data is invalid, my custom links become blank again.
After searching for solutions, I tried setting EnableViewState="true" but that didnt make any difference.
Can anyone tell me what I am doing wrong?
Below id the code for my custom template:
<%@ Control Language="C#" %><%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %><%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI" Assembly="Telerik.Sitefinity" %><%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.ContentUI" Assembly="Telerik.Sitefinity" %><%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.Comments" Assembly="Telerik.Sitefinity" %><%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.PublicControls.BrowseAndEdit" Assembly="Telerik.Sitefinity" %><%@ Import Namespace="Telerik.Sitefinity" %> <%@ Import Namespace="Telerik.Sitefinity.Modules.Blogs" %><%@ Import Namespace="Telerik.Sitefinity.GenericContent.Model" %><%@ Import Namespace="System.Collections.Generic" %><%@ Import Namespace="System.Linq" %><script runat="server"> protected void Page_Load(object sender, EventArgs e) this.SingleItemContainer.ItemDataBound += new EventHandler<RadListViewItemEventArgs>(SingleItemContainer_ItemDataBound); void SingleItemContainer_ItemDataBound(object sender, RadListViewItemEventArgs e) if (e.Item is RadListViewDataItem) RadListViewDataItem item = e.Item as RadListViewDataItem; Telerik.Sitefinity.Blogs.Model.BlogPost post = item.DataItem as Telerik.Sitefinity.Blogs.Model.BlogPost; if (post != null) //FIND CONTROLS HyperLink hl_comments = e.Item.FindControl("hl_comments") as HyperLink; HyperLink hl_prev = e.Item.FindControl("hl_prev") as HyperLink; HyperLink hl_next = e.Item.FindControl("hl_next") as HyperLink; BlogsManager manager = BlogsManager.GetManager(); var query = manager.GetComments().Where<Comment>(c => c.CommentedItemID == post.Id && c.CommentStatus == CommentStatus.Published); //SHOW COMMMENTS LINKS / COUNT hl_comments.NavigateUrl = Request.Url.ToString() + "#comments"; if (query.Count() == 0) hl_comments.Text = "Go Comment!"; hl_comments.Enabled = false; else if (query.Count() == 1) hl_comments.Text = query.Count().ToString() + " Comment"; else hl_comments.Text = query.Count().ToString() + " Comments"; // SHOW PREVIOUS NEXT LINKS IQueryable<Telerik.Sitefinity.Blogs.Model.BlogPost> live_posts = manager.GetBlogPosts().Where(b => b.Parent == post.Parent && b.Status == ContentLifecycleStatus.Live); string current_node = "http://" + Request.Url.Host + "/" + Telerik.Sitefinity.Web.SiteMapBase.GetActualCurrentNode().UrlName; try var prev_post = live_posts.Where(t => t.PublicationDate < post.PublicationDate).OrderByDescending(t => t.PublicationDate).First(); if (prev_post != null) hl_prev.NavigateUrl = current_node + prev_post.ItemDefaultUrl; else hl_prev.Visible = false; catch (Exception ex) //sequence contains no elements hl_prev.Visible = false; try var next_post = live_posts.Where(n => n.PublicationDate > post.PublicationDate).OrderBy(n => n.PublicationDate).First(); if (next_post != null) hl_next.NavigateUrl = current_node + next_post.ItemDefaultUrl; else hl_next.Visible = false; catch (Exception ex2) //sequence contains no elements hl_next.Visible = false; </script><sf:ResourceLinks ID="resourceLinks" runat="server"> <sf:ResourceFile Name="CSS/blogs.css" /></sf:ResourceLinks><telerik:RadListView ID="SingleItemContainer" ItemPlaceholderID="ItemContainer" AllowPaging="False" runat="server" EnableEmbeddedSkins="false" EnableEmbeddedBaseStylesheet="false"> <LayoutTemplate> <div class="sfpostDetails"> <%--<div class="sfpostLinksWrp"> <sf:MasterViewHyperLink ID="MasterViewHyperLink1" class="sfpostBack" Text="<%$ Resources:BlogResources, allposts %>" runat="server" /> </div>--%> <asp:PlaceHolder ID="ItemContainer" runat="server" /> </div> </LayoutTemplate> <ItemTemplate> <div class="pubDate"> <sf:FieldListView ID="PostDate" runat="server" Format="PublicationDate.ToLocal():MMMM dd, yyyy" /> </div> <sf:FieldListView ID="PostTitle" runat="server" Text="0" Properties="Title" WrapperTagName="h1" WrapperTagCssClass="sfpostTitle" /> <div class="author"> <asp:Literal ID="Literal2" Text="<%$ Resources:Labels, By %>" runat="server" /> <sf:PersonProfileView ID="PersonProfileView1" runat="server" /> </div> <sf:ContentBrowseAndEditToolbar ID="BrowseAndEditToolbar" runat="server" Mode="Edit,Delete,Unpublish"></sf:ContentBrowseAndEditToolbar> <sf:FieldListView ID="PostContent" runat="server" Text="0" Properties="Content" WrapperTagName="div" WrapperTagCssClass="sfpostContent" /> <span class="labels">LABELS:</span> <sitefinity:FlatTaxonField ID="FlatFieldControl" DisplayMode="Read" runat="server" WebServiceUrl="~/Sitefinity/Services/Taxonomies/FlatTaxon.svc" AllowMultipleSelection="true" TaxonomyId="CB0F3A19-A211-48a7-88EC-77495C0F5374" TaxonomyMetafieldName="Tags" Expanded="false" ExpandText="ClickToAddTags" BindOnServer="true" CssClass="tagList_wrapper" /> <br clear="all" /> <asp:HyperLink ID="hl_comments" runat="server" CssClass="sfpostCommentsCount" /> <sf:DetailsViewHyperLink ID="FullStory" Text="Permanent link to this post" runat="server" CssClass="sfpostFullStory" /> <div id="postnavigation"> <div class="prevpost"> <asp:hyperlink runat="server" id="hl_prev" Text="Previous Post" /> </div> <div class="nextpost"> <asp:hyperlink runat="server" id="hl_next" Text="Next Post" /> </div> </div> <div id="postacomment"><p>Comments</p></div> <sf:ContentView id="commentsListView" ControlDefinitionName="BlogsCommentsFrontend" DetailViewName="CommentsMasterView" ContentViewDisplayMode="Master" LayoutTemplatePath="~/CustomTemplates/CommentsMasterView.ascx" runat="server" /> <sf:ContentView id="commentsDetailsView" ControlDefinitionName="BlogsCommentsFrontend" DetailViewName="CommentsDetailsView" ContentViewDisplayMode="Detail" LayoutTemplatePath="~/CustomTemplates/CommentsDetailsView.ascx" runat="server" /> </ItemTemplate></telerik:RadListView>Hi Nidhi,
Thank you for contacting us.
Excuse me I was unable to properly view the output of the code. The template was not rendering properly. I suppose you are using Sitefinity 4.1 for using the incline script block to write scripts. Please note inline scripts are no longer supported after Sitefinity 4.2 and eventual upgrade will make the template return "object reference not set to the instance of the object" error.
I suppose the problem is coming from the paging links not bound to the proper RadListView. With blog post there are two views DetailsPostView (DetailsView) and MasterPostView (PostList), the RadListView that lists blog details or blogs list is different for both views.
In this case DetailsPostView the RadListView items are accessed trough DetailsView.
protected virtual RadListView DetailsView get return this.Container.GetControl<RadListView>("SingleItemContainer", true); namespace SitefinityWebApp.DetailView public class Test : Telerik.Sitefinity.Modules.Blogs.Web.UI.Public.DetailPostsView protected override void InitializeListView(IQueryable<Telerik.Sitefinity.Blogs.Model.BlogPost> query, int? totalCount) base.InitializeListView(query, totalCount); this.DetailsView.ItemDataBound += new EventHandler<RadListViewItemEventArgs>(DetailsView_ItemDataBound); this.DetailsView.PreRender += new EventHandler(DetailsView_PreRender); void DetailsView_PreRender(object sender, EventArgs e) //throw new NotImplementedException(); void DetailsView_ItemDataBound(object sender, RadListViewItemEventArgs e) if (e.Item is RadListViewDataItem) var rep = e.Item.FindControl("ImageButton1") as Repeater; public override string LayoutTemplatePath get return ClassName.layoutTemplate; private const string layoutTemplate = "~/VppPrefix/SitefinityWebApp.DetailsView.BlogPostFrontend.ascx";~/VppPrefix(put name here)" To register the virtual path go to