Как получить доступ к элементу управления на странице общего макета с другой страницы - PullRequest
1 голос
/ 25 сентября 2019

Я занимаюсь разработкой нового приложения asp.net.До сих пор я разработал вид компоновки с панелью навигации и нижним колонтитулом, домашней страницей и страницей входа, и все это отлично работает.Теперь после успешного входа в систему я хочу изменить кнопку входа в систему на панели навигации, чтобы выйти из нее.Для этого мне нужно получить доступ к элементам управления макета на странице входа, но я не могу.Я перепробовал множество решений от Stack Overflow для этой проблемы, но, к сожалению, у меня ничего не получалось.

В качестве первого шага я создал класс модели и контроллер для представления макета, чтобы получить доступ к элементам управления представления макета на другой странице, но не могу получить доступ к свойству модели в макете.посмотреть сам.

Модель макета:

public class _LayoutModels
    {
        private string btnName = "Login";
        public string loginBtnName
        {
            get
            {
                return btnName;
            }
            set
            {
                btnName = value;
            }
        }
    }

Контроллер макета:

public class _LayoutController : Controller
    {
        // GET: _Layout
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Index(_LayoutModels lm)
        {
            lm.loginBtnName = "Login";  
            ViewData["Message"] = lm;
            return View();
        }
    }

И если я попытаюсь использовать это свойствов режиме компоновки выдается исключение нулевой ссылки.

Код представления макета:

@{ 
    var data = (_LayoutModels)ViewData["Message"];
}

@Html.ActionLink(@data.loginBtnName, "Index", "Login", routeValues: null, htmlAttributes: new { id = "loginLink", @class = "nav-link" })

Надеюсь, я четко объяснил свою проблему.Я хочу получить доступ к элементам управления в представлении макета, чтобы я мог изменить его имя или функциональность в зависимости от имени входа.Если невозможно получить доступ к элементам управления в представлении макета, то как я могу это сделать?-Спасибо заранее.

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Используйте session для хранения информации для входа.После успешного входа в систему сохраните ключ в переменную сеанса, например,

public ActionResult Login(LoginViewModel model){
    // your authentication and login
    Session["loggedUserId"] = userId; // loggedUserId is a key
}

, теперь в html навигации вы можете легко проверить вход в систему,

@{
    if(Session["loggedUserId"] !== null){
        // This block checks if user is logged in
        @Html.ActionLink("Logout", "Logout", "Login", routeValues: null, htmlAttributes: new { id = "logoutLink", @class = "nav-link" })
    }
    else {
        @Html.ActionLink("Login", "Login", "Login", routeValues: null, htmlAttributes: new { id = "loginLink", @class = "nav-link" })
    }
}

И сделать это в своемметод выхода из системы

public ActionResult Logout(){
    // Your logout logic
    Session["loggedUserId"] = null;
}
0 голосов
/ 25 сентября 2019

просто нужно перейти к html вашей кнопки входа в систему и ввести ее, если все еще, и проверить, аутентифицирован ли пользователь или нет, и показать кнопку соответствующим образом. См. Код ...

@if (User.Identity.IsAuthenticated)
 {
   <li> <a href="@Url.Action("Method-Name", "Controoler-name", new { area = "area name if use" })" class="home">Logout </a></li>

 }
 else
 {
   <li> <a href="@Url.Action("Login","Account")" class="home">Login </a></li>

 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...