Доступ к 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">&nbsp;</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">&nbsp;</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);
    }

0 ответов

Другие вопросы по тегам