AI OnAI Off
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.