November Happy Hour will be moved to Thursday December 5th.
AI OnAI Off
November Happy Hour will be moved to Thursday December 5th.
Hi Daved,
Can you show us how your controller, viewmodel, and view look like?
Let's say your project is based on Alloy :)
You can define a new property on start page:
[ContentType(GUID = "...")] public class StartPage : PageData { public virtual PageReference MyPage { get; set; } ... }
view model:
public class StartPageViewModel : PageViewModel<StartPage> { public SomePageData MyPage { get; set; } public StartPageViewModel(StartPage currentPage) : base(currentPage) { } }
controller:
public class StartPageController : PageController<StartPage> { private readonly IContentLoader _contentLoader; public StartPageController(IContentLoader contentLoader) { _contentLoader = contentLoader; } [ContentOutputCache] public ActionResult Index(StartPage currentPage) { var viewModel = new StartPageViewModel(currentPage); if (!ContentReference.IsNullOrEmpty(currentPage.MyPage)) { viewModel.MyPage = _contentLoader.Get<SomePageData>(currentPage.MyPage); } return View(viewModel); } }
Index.cshtml:
@using ... @model StartPageViewModel @Html.FullRefreshPropertiesMetaData(new[] { "MyPage" }) @{ Html.RenderPartial("_MyPage", Model); }
_MyPage.cshtml:
@using ... @model StartPageViewModel @if (!PageEditing.PageIsInEditMode && Model.MyPage == null) { return; } <div @Html.EditAttributes(x => x.CurrentPage.MyPage)> ... </div>
I think what I was missing with my initial approach was the type of object being passed to the controller. I ended up taking a different approach with this, however, as more properties and data was needed for this paticular item, causing me to create a block.
Thanks for helping, though. I appreciate the sample above.
I am using MVC for a project and I have a page with a property called ReferenceLink and it's of type PageReference. When I render that property in my view, is it possible to use PropertyFor and render the ReferenceLink differently than the default? I thought I could with a Tag on the PropertyFor method, but I would want it to call a controller to populate a ViewModel with the specific properties I need. All pages inherit from a base that has Thumbnail, Description, and Title properties defined on it, so I was going to use the PageReference to get the page and those properties and, render a specific partial that takes a model type of that ViewModel.
Then again, maybe I am going about this all the wrong way. Does anyone have some pointers or ideas on how to approach this? Is this a case where I would want to create a block?
Thanks.