Доступ к ViewComponent на разных контроллерах
У меня есть глобальный выпадающий список для всего приложения, мне нужно изменить его значение для всего приложения, и для этого я использую ViewComponent и вызываю его из основного layout.cshtml, событие Onchange, код работает отлично, как только я перехожу к другому контроллеру jquery вызывается функция post, и раскрывающееся значение, установленное на значение по умолчанию, а не выбранное значение, например значение по умолчанию, например, A, и выбранное значение - B, когда я перехожу к другому контроллеру, значение становится A из B, что неверно, оно должно сохранять сохраненное выбранное значение. Вот мой класс ViewComponent
[ViewComponent(Name = "WebSiteViewComponent")]
public class WebSiteViewComponent:ViewComponent
{
SepiaCMSV2Context _context = new SepiaCMSV2Context();
public async Task<IViewComponentResult> InvokeAsync()
{
if (Auth.UserID > 0)
{
int userId = Auth.UserID;
ViewBag.WebSiteId = _context.WebSite.Include(q=>q.WebSiteUsers).ToList().Where(q=>q.WebSiteUsers.Any(a=>a.UserId==Auth.UserID)).OrderBy(q=>q.WebSiteId);
if (ViewBag.WebSiteId != null)
{
return View(ViewBag.WebSiteId);
}
}
return null;
}
вот мой вид по умолчанию
@model IEnumerable<SepiaCMS.Models.WebSite>
@{
ViewData["Title"] = "WebSiteView";
}
@if (Auth.UserID > 0)
{
<div class="col-md-4">
@Html.DropDownListFor(s=>s.FirstOrDefault().WebSiteId,new SelectList(ViewBag.WebSiteId,"WebSiteId","WebSiteName",Auth.UserFirstWebSiteId))
</div>
}
Это мой Layout.cshmtl
<div class="row">
<div class="col">
<span class="btn-menu-toggle">
<button class="btn btn-menu"><i class="fa fa-bars"></i></button>
</span>
<div class="title-wrapper">
<h1 class="title"></h1>
</div>
</div>
@if (Auth.UserID > 0)
{
<div class="col-md-7">
@await Component.InvokeAsync("WebSiteViewComponent", Auth.UserFirstWebSiteId)
</div>
}
<div class="col">
<div class="input-group top-search-area">
<input type="text" value="" placeholder="Search in App" name="q" class="form-control searchTextBox wtmark nullText" id="searchBox">
<span class="input-group-btn">
<button class="btn btn-search" id="searchBtn" title="Enter text to search"><i class="fa fa-search"></i></button>
</span>
</div>
</div>
<div class="col">
<div class="action-area fr">
<div class="header-notification">
<div class="dropdown">
<button type="button" class="dropdown-toggle icon" data-toggle="dropdown" aria-expanded="false">
<i class="fa fa-bell" aria-hidden="true"></i>
</button>
<ul class="dropdown-menu dropdown-menu-right">
<li class="item"><a href="/User/ViewProfile"> View Profile </a></li>
<li class="item"><a href="/Task"><span></span> Task(s) </a></li>
<li class="item"><a href="/User/EditProfile"><span class="icon"> </span>Edit Profile</a></li>
<li class="item"><a href="@Url.Action("Logout", "User", new { Area = "Admin" })"><span>Log Out</span></a></li>
</ul>
</div>
</div>
<div class="header-profile">
<div class="dropdown">
<button href="#" class="dropdown-toggle icon" data-toggle="dropdown" aria-expanded="false">
@*<img class="profile-img img-circle" src="~/images/profile-pic.jpg" />*@
<span class="user-name"><span class="icon margin-5"><img src="~/images/sepiaLogo.png" alt="" class="img-thumbnail" width="24px" height="24px" /></span>@Auth.UserName @Auth.RoleName </span>
</button>
<ul class="dropdown-menu dropdown-menu-right">
<li class="item"> @Html.ActionLink("Profile", "ViewProfile", "User", new { id = Auth.UserID })</li>
<li class="item"><a href="/Task"> <span></span> Task(s) </a></li>
<li class="item"><a href="/User/EditProfile"><span class="icon"> </span>Edit Profile</a></li>
<li class="item"><a href="@Url.Action("Logout", "User", new { Area = "Admin" })"><span>Log Out</span></a></li>
</ul>
</div>
</div>
<div>
@if (Auth.UserID > 0)
{
}
</div>
</div>
</div>
</div>
А вот мой скрипт макета постфункции jquery
$("#WebSiteId").change(function () {
var strSelected = $(this).val();
var url = "@Url.Action("SelectedWebSite", "WebSite")?WebSiteId=" + strSelected;
$.post(url, function (data) {
if (data == 2) {
$('select[name^="WebSiteId"] option[value=' + strSelected + ']').attr("selected", true);
window.location.href = "http://localhost:57063/Admin/User";
}
});
});
и это вызывающий метод
[HttpPost]
public IActionResult SelectedWebSite(int WebSiteId)
{
if (WebSiteId > 0)
{
HttpHelper.HttpContext.Session.SetID("WebSiteId", WebSiteId);
if(Auth.UserFirstWebSiteId==Auth.WebSiteId)
{
return Json(1);
}
HttpHelper.HttpContext.Session.SetID("UserFirstWebSiteId", WebSiteId);
}
return Json(2);
}