首页 新闻 会员 周边 捐助

MVC登录后,怎样将用户名传到视图中显示出来?

0
悬赏园豆:20 [已解决问题] 解决于 2018-03-19 22:09

   

(这个Login是HomeController的Index方法页面)
登录这样写的:<h2>@Html.ActionLink("Login", "MyselfLogOn", "Login")</h2>

点击Login会到LoginController的Login页面

Login登录页面如下:

如果登录成功,则会返回到登录主页面:

return RedirectToAction("Index", "Home");

现在我想返回到主页面时,把登录的用户名传过去,把Login换成登录的用户名

这个值该怎么传过去了?

请求大佬们看看,刚学MVC!请谅解!!

MVC
问题补充:

在Login控制器里

return RedirectToAction("Index", "Home",loginviewmodel.name);

loginviewmodel.name即为传递的参数,那在返回Home的Index视图怎样获取传来的值?

逢玉FYL的主页 逢玉FYL | 初学一级 | 园豆:30
提问于:2018-03-19 13:20

return RedirectToAction("Index", "Home",loginviewmodel.name);loginviewmodel.name即为传递的参数,那在Home的Index视图怎样获取了?

逢玉绿 6年前

@逢玉绿: return RedirectToAction("Index", "Home",new {loginName=loginviewmodel.name});
Home控制器中需要加一个
public ActionResult index(string loginName){}来接受参数
试试看,有没有能接收到参数

华临天下 6年前

@华临天下: 嗯,那在HomeController的Index视图中获取传来的值?

逢玉绿 6年前

@逢玉绿: 就是那个Index方法中,应该获取得到那个传来的值

华临天下 6年前
< >
分享
最佳答案
0

 

可以使用登录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>

 

收获园豆:20
Shendu.CC | 老鸟四级 |园豆:2138 | 2018-03-19 14:02

我用的是VS2015,没有asp.net core2.0,除了这个还有其他方法吗?

逢玉FYL | 园豆:30 (初学一级) | 2018-03-19 14:29

@逢玉绿: 设置cookie保存用户登录信息,可以在任何界面中获取用户信息,不用每次都传值,这样反而很麻烦。

asp.net mvc 后台设置cookie很简单,请参考:https://www.cnblogs.com/JoeSnail/p/7842735.html

Response.Cookies["userName"].Value = "xxx";

前端使获取cookie就可以了

Request.Cookies["userName"]    
Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-19 14:56

@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链接啊?这要怎么解决呢?

逢玉FYL | 园豆:30 (初学一级) | 2018-03-19 16:12

@逢玉绿: 你做一个判断:

@{
   
     if(ViewBag.name==null)
           <h2>@Html.ActionLink......

}
Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-19 16:24

@逢玉绿: 你试试

Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-19 16:25

@逢玉绿: 在前端可以直接获取HttpContext.Request的cookie,得到用户的登录信息,不需要从后台传值。

Shendu.CC | 园豆:2138 (老鸟四级) | 2018-03-19 16:59

@Shendu.cc: 嗯,谢谢大佬的提示!

逢玉FYL | 园豆:30 (初学一级) | 2018-03-19 22:05
其他回答(2)
0

@Html.ActionLink("Login", "MyselfLogOn", "Login", new { loginName = m.UserName },null)

好像是这样的吧。。。。

华临天下 | 园豆:1501 (小虾三级) | 2018-03-19 13:37

return RedirectToAction("Index", "Home",loginviewmodel.name);loginviewmodel.name即为传递的参数,那在Home的Index视图怎样获取?

支持(0) 反对(0) 逢玉FYL | 园豆:30 (初学一级) | 2018-03-19 14:03

@逢玉绿: 这个好像是页面传值的问题啊?

你要是实在要在控制器中传值的话

//
// 摘要:
// 使用操作名称、控制器名称和路由值重定向到指定的操作。
//
// 参数:
// actionName:
// 操作的名称。
//
// controllerName:
// 控制器的名称
//
// routeValues:
// 路由的参数。
//
// 返回结果:
// 重定向结果对象。
protected internal RedirectToRouteResult RedirectToAction(string actionName, string controllerName, object routeValues);

return RedirectToAction("Index", "Home",“loginName”);

这个方法看看行不行

支持(0) 反对(0) 华临天下 | 园豆:1501 (小虾三级) | 2018-03-19 14:13
0

用viewbag

墨笔淡红尘 | 园豆:13 (初学一级) | 2018-03-19 17:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册