Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
AI OnAI Off
Five New Optimizely Certifications are Here! Validate your expertise and advance your career with our latest certification exams. Click here to find out more
I managed to do this, but I'm not sure if it's the best way, but it works:
Controller:
public ActionResult Index(CustomNavPage currentPage) { CustomNavPageViewModel model = new CustomNavPageViewModel(); if ((CustomNavPageViewModel)Session["model"] != null) { model = (CustomNavPageViewModel)Session["model"]; } else { model.AvailablePageList = GetAvailablePages(); model.SelectedPageList = new List<PageData>(); } Session["model"] = model; return View(model); } public ActionResult SetCustomLinks(int pageID) { var model = (CustomNavPageViewModel)Session["model"]; Session.Clear(); var selectedPage = new PageData(); if (model.SelectedPageList == null || model.SelectedPageList.Count == 0) { model.SelectedPageList = new List<PageData>(); } if (model.AvailablePageList != null || model.AvailablePageList.Count != 0) { foreach (var page in model.AvailablePageList) { if (page.ContentLink.ID == pageID) { model.SelectedPageList.Add(page); selectedPage = page; } else { continue; } } model.AvailablePageList.Remove(selectedPage); } Session["model"] = model; return View("Index", model); } public ActionResult RemoveCustomLinks(int pageID) { var model = (CustomNavPageViewModel)Session["model"]; Session.Clear(); var selectedPage = new PageData(); if (model.AvailablePageList == null || model.AvailablePageList.Count == 0) { model.AvailablePageList = new List<PageData>(); } if (model.SelectedPageList != null || model.SelectedPageList.Count != 0) { foreach (var page in model.SelectedPageList) { if (page.ContentLink.ID == pageID) { model.AvailablePageList.Add(page); } } model.SelectedPageList.Remove(selectedPage); } Session["model"] = model; return View("Index", model); } public List<PageData> GetAvailablePages() { var availablePageList = new List<PageData>(); var pageList = DataFactory.Instance.GetChildren(PageReference.StartPage); foreach (var page in pageList) { availablePageList.Add(page); } return availablePageList; }
ViewModel:
public class CustomNavPageViewModel { public List<PageData> AvailablePageList { get; set; } public List<PageData> SelectedPageList { get; set; } }
View:
@model BlocketProject.Models.ViewModels.CustomNavPageViewModel @{ ViewBag.Title = "Index"; } @if (Model.AvailablePageList.Count != 0 && Model.AvailablePageList != null) { <h2>Tillgängliga länkar:</h2> foreach (var page in Model.AvailablePageList) { using (Html.BeginForm("SetCustomLinks", "CustomNavPage", new {@pageID = page.ContentLink.ID }, FormMethod.Post)) { <span><button type="submit" class="linkButton">+</button> @page.Name</span> } } } @if (Model.SelectedPageList.Count != 0 && Model.SelectedPageList != null) { <h2>Valda länkar:</h2> foreach (var page in Model.SelectedPageList) { using (Html.BeginForm("RemoveCustomLinks", "CustomNavPage", new { @pageID = page.ContentLink.ID }, FormMethod.Post)) { <span><button type="submit" class="linkButton">-</button> @page.Name</span> } } <div> <ul class="YourMenu"> @foreach (var page in Model.SelectedPageList) { <li> <a href="@page.LinkURL">@page.Name</a> </li> } </ul> </div> }
I hope this works for you buddy! ;)
Forgot to add a line, replace the RemoveCustomLinks with the following to make it work correctly:
public ActionResult RemoveCustomLinks(int pageID) { var model = (CustomNavPageViewModel)Session["model"]; Session.Clear(); var selectedPage = new PageData(); if (model.AvailablePageList == null || model.AvailablePageList.Count == 0) { model.AvailablePageList = new List<PageData>(); } if (model.SelectedPageList != null || model.SelectedPageList.Count != 0) { foreach (var page in model.SelectedPageList) { if (page.ContentLink.ID == pageID) { model.AvailablePageList.Add(page); selectedPage = page; } } model.SelectedPageList.Remove(selectedPage); } Session["model"] = model; return View("Index", model); }
Also, replace:
<ul class="YourMenu"> @foreach (var page in Model.SelectedPageList) { <li> <a href="@page.LinkURL">@page.Name</a> </li> } </ul>
with:
<ul class="YourMenu"> @foreach (var page in Model.SelectedPageList) { <li> @Html.UrlLink(page.LinkURL, page.Name) </li> } </ul>
for a nicer URL in the browser :)
Console.WriteLine(" Hello Everybody");
I'am trying to build a customizable top-navigation-bar (in EpiServer 7.5, MVC).
I made the site MainNavigation in the Left-nav.
What I want to do is make it so that every logedin site-user can customize the top-nav-meny by adding pages from the MainNav (clicking a button or something like that) and save the ContentLink and/or PageRefercenes in the EpiServerProfile class so it can be displayed in the custom top-nav as links.
But i'am a bit stuck, cause i cant find a good way to save the pages (with the EpiserverProfile class) display the pages.
Anybody got some wisdom and wanna earn some sweet code-karma it would me much appreciated :)
/Stefan from the North