(这个Login是HomeController的Index方法页面)
登录这样写的:<h2>@Html.ActionLink("Login", "MyselfLogOn", "Login")</h2>
点击Login会到LoginController的Login页面
Login登录页面如下:
如果登录成功,则会返回到登录主页面:
return RedirectToAction("Index", "Home");
现在我想返回到主页面时,把登录的用户名传过去,把Login换成登录的用户名
这个值该怎么传过去了?
请求大佬们看看,刚学MVC!请谅解!!
在Login控制器里
return RedirectToAction("Index", "Home",loginviewmodel.name);
loginviewmodel.name即为传递的参数,那在返回Home的Index视图怎样获取传来的值?
可以使用登录cookie。
请参考:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/cookie?tabs=aspnetcore2x
asp.net core2.0 :
在Starup.cs类中:
public void ConfigureServices(IServiceCollection services){
//添加认证Cookie信息 services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie()
.....
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
.....
//验证中间件
app.UseAuthentication();
......
}
后台设置登录cookie用户名:
//用户标识 var identity = new ClaimsIdentity(CookieAuthenticationDefaults.AuthenticationScheme); identity.AddClaim(new Claim(ClaimTypes.Name, user.Name)); await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(identity));
前端获取用户名:
<span>当前用户:@User.Identity.Name</span>
我用的是VS2015,没有asp.net core2.0,除了这个还有其他方法吗?
@逢玉绿: 设置cookie保存用户登录信息,可以在任何界面中获取用户信息,不用每次都传值,这样反而很麻烦。
asp.net mvc 后台设置cookie很简单,请参考:https://www.cnblogs.com/JoeSnail/p/7842735.html
Response.Cookies["userName"].Value = "xxx";
前端使获取cookie就可以了
Request.Cookies["userName"]
@Shendu.cc: 嗯
在Login控制器里:
Response.Cookies["userName"].Value = loginviewmodel.name;
Response.Cookies["userName"].Expires = DateTime.Now.AddDays(10);
return RedirectToAction("Index", "Home");
在Home控制器的Index方法获取:
if (Request.Cookies["userName"] != null)
{
HttpCookie aCookie = Request.Cookies["userName"];
ViewBag.name = Server.HtmlEncode(aCookie.Value);
}
即后台获取到:
<div style="color:blue;font-family:'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;font-size:40px;">@ViewBag.name</div>
<div style="font-family:DilleniaUPC;font-size:30px;">已登录</div>
但是<h2>@Html.ActionLink("Login", "MyselfLogOn", "Login")</h2>
我的登录是通过ActionLink进入登录页面的,值是穿过来了,但Login这个链接还显示在这里,总不可能登录的用户还显示Login链接啊?这要怎么解决呢?
@逢玉绿: 你做一个判断:
@{ if(ViewBag.name==null) <h2>@Html.ActionLink...... }
@逢玉绿: 你试试
@逢玉绿: 在前端可以直接获取HttpContext.Request的cookie,得到用户的登录信息,不需要从后台传值。
@Shendu.cc: 嗯,谢谢大佬的提示!
@Html.ActionLink("Login", "MyselfLogOn", "Login", new { loginName = m.UserName },null)
好像是这样的吧。。。。
return RedirectToAction("Index", "Home",loginviewmodel.name);loginviewmodel.name即为传递的参数,那在Home的Index视图怎样获取?
@逢玉绿: 这个好像是页面传值的问题啊?
你要是实在要在控制器中传值的话
//
// 摘要:
// 使用操作名称、控制器名称和路由值重定向到指定的操作。
//
// 参数:
// actionName:
// 操作的名称。
//
// controllerName:
// 控制器的名称
//
// routeValues:
// 路由的参数。
//
// 返回结果:
// 重定向结果对象。
protected internal RedirectToRouteResult RedirectToAction(string actionName, string controllerName, object routeValues);
return RedirectToAction("Index", "Home",“loginName”);
这个方法看看行不行
用viewbag
return RedirectToAction("Index", "Home",loginviewmodel.name);loginviewmodel.name即为传递的参数,那在Home的Index视图怎样获取了?
– 逢玉绿 6年前@逢玉绿: return RedirectToAction("Index", "Home",new {loginName=loginviewmodel.name});
– 华临天下 6年前Home控制器中需要加一个
public ActionResult index(string loginName){}来接受参数
试试看,有没有能接收到参数
@华临天下: 嗯,那在HomeController的Index视图中获取传来的值?
– 逢玉绿 6年前@逢玉绿: 就是那个Index方法中,应该获取得到那个传来的值
– 华临天下 6年前