Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从其他页面访问共享布局页面中的控件_C#_Asp.net Mvc - Fatal编程技术网

C# 如何从其他页面访问共享布局页面中的控件

C# 如何从其他页面访问共享布局页面中的控件,c#,asp.net-mvc,C#,Asp.net Mvc,我正在开发一个新的asp.net应用程序。到目前为止,我已经开发了一个带有导航栏和页脚、主页和登录页的布局视图,一切都很好。现在,在成功登录后,我希望将导航栏中的登录按钮更改为注销按钮。为此,我必须访问登录页面中的布局视图控件,但我不能。对于这个问题,我已经尝试了许多来自堆栈溢出的解决方案,但不幸的是,没有任何方法对我有效 作为第一步,我已经为布局视图创建了一个模型类和一个控制器,以便访问其他页面中布局视图的控件,但我无法访问布局视图本身中的模型属性 布局模型: public class _La

我正在开发一个新的asp.net应用程序。到目前为止,我已经开发了一个带有导航栏和页脚、主页和登录页的布局视图,一切都很好。现在,在成功登录后,我希望将导航栏中的登录按钮更改为注销按钮。为此,我必须访问登录页面中的布局视图控件,但我不能。对于这个问题,我已经尝试了许多来自堆栈溢出的解决方案,但不幸的是,没有任何方法对我有效

作为第一步,我已经为布局视图创建了一个模型类和一个控制器,以便访问其他页面中布局视图的控件,但我无法访问布局视图本身中的模型属性

布局模型:

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" })
布局控制器:

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" })
若我试图在布局视图中使用这个属性,它会抛出null引用异常

布局视图代码:

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" })
我希望我已经把我的问题解释清楚了。我想访问布局视图中的控件,以便根据登录名更改其名称或功能。如果无法访问布局视图中的控件,则如何访问?
-提前感谢。

使用
会话
存储登录信息。成功登录后,将密钥保存到会话变量中,如下所示:

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;
}

只需转到您的登录按钮html,并将其放入if alse中,检查用户是否经过身份验证,并相应地显示按钮。请参阅代码

@if(User.Identity.IsAuthenticated)
{
  • } 其他的 {

  • }
    我认为您可以使用局部视图。您的解决方案解决了我的问题。非常感谢你。