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