Help shape the future of CMS PaaS release notes! Take this quick survey and share your feedback.
AI OnAI Off
Help shape the future of CMS PaaS release notes! Take this quick survey and share your feedback.
Not sure about Html.RenderPartial(). Haven't tried it with local blocks.
Try following:
@Html.PropertyFor(m => m.SiteSettings.MySiteSettingsPage.SiteStartPage.ToPage<StartPage>().FooterSettings)
Then it depends on what you need to accomplish.
1) If you don't need a controller for your block type -> then just name your view tha same name as block - FooterSettings.cshtml. This will tell EPiServer to skip any controllers and render view directly.
2) If you need custom logic (like construct custom view model) you may need a controller for this block.
public class FooterSettingsBlockController : BlockController<FooterSettingsBlock>
{
public ActionResult(FooterSettingsBlock currentBlock)
{
return PartialView(".....", model);
}
}
Keep in mind that using second choice you need to rename view in order to EPiServer understand that you need a controller for your block. A good practice is to start those partial views with underscrore - "_" -> "/Views/Shared/_FooterSettings.cshtml".
I have a page with local block
[ContentType(GUID = "d9298163-9046-4bd1-9ff1-81e5abb83a80", AvailableInEditMode = true)]
public class StartPage : BasePageData
{
private const string LeftNavigationMenu = "Left Navigation";
[CultureSpecific(true)]
[Display(GroupName = SystemTabNames.Content, Order = 50)]
public virtual ContentArea MainContentAreaTop { get; set; }
[CultureSpecific(true)]
[Display(GroupName = SystemTabNames.Content, Order = 60)]
public virtual ContentArea MainContentArea { get; set; }
[Display(GroupName = FooterSettingsBlock.FooterTab, Order = 100)]
public virtual FooterSettingsBlock FooterSettings { get; set; }
And I try to render partial view and send to view FooterSettings:
@{
Html.RenderPartial("Shared/Footer", @Model.SiteSettings.MySiteSettingsPage.SiteStartPage.ToPage<StartPage>().FooterSettings);
}
I have a logic in StartPageController:
public class StartPageController : BasePageController<StartPage>
{[HttpPost]
public ActionResult Subscribe(SubscriptionViewModel model)
{
return Redirect("/");
}
}
and try to call this method from partial Footer view:
@model Valtech.Core.Website.Models.Blocks.FooterSettingsBlock
<div>
<h3>@Html.PropertyFor(m => m.SubscriptionHeading)</h3>
@Html.Partial("shared/Subscription", new SubscriptionViewModel {CurrentBlock=Model})
</div>
Subscription partial view:
@model Valtech.Core.Website.Models.ViewModels.SubscriptionViewModel
@using (Html.BeginForm("Subscribe", "StartPage", FormMethod.Post, new { id = "subscribeForm" }))
{
<input name="Email" id="userEmail" type="text" placeholder="@Model.CurrentBlock.EnterEmailText"/>
<a href="javascript:document.getElementById('subscribeForm').submit()">@Model.CurrentBlock.SubmitText</a>
}
When I click my link, I get TypeMismatchException and this stackTraice: