A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn More.
AI OnAI Off
A critical vulnerability was discovered in React Server Components (Next.js). Our systems remain protected but we advise to update packages to newest version. Learn 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