【发布时间】:2014-10-11 19:30:04
【问题描述】:
我在将值从UserProfile 传递到@Viewbag 以显示在Index.cshtml 中时遇到一些问题。
让我们解释一下:
当我注册新用户或登录时,我试图在 viewbag 中从 UserProfile 传递 UserType 字段。
UserType 是我在UserProfile 上创建的自定义字段,用于验证用户是“Musico”还是“Ouvinte”
调试应用程序后,我看到 viewbag 正在取 NULL 值。
这是我试图从UserProfile 中的Register and Login post method 中获取价值的代码:
登录后方法
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid && WebSecurity.Login(model.UserName,
model.Password,
persistCookie: model.RememberMe))
{
var context = new UsersContext();
var username = User.Identity.Name;
var user = context.UserProfiles.SingleOrDefault(u => u.UserName == username);
var userType = user.UserType;
TempData["UserType"] = userType; //Taking UserType from User Profile
return RedirectToLocal(returnUrl);
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);
}
注册发布方法
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
var context = new UsersContext();
var username = User.Identity.Name;
var user = context.UserProfiles
.SingleOrDefault(u => u.UserName == username);
var userType = user.UserType;
WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new
{
UserType = model.UserType
});
WebSecurity.Login(model.UserName, model.Password);
// string currentUserType = u.UserType;
TempData["UserType"] = userType;//Get the userType to validate on _Layout
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e)
{
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
return View(model);
}
在索引页面的一部分调用viewbag
<p>
@if (Request.IsAuthenticated && ViewBag.UserType.Equals("Musico"))
{
<span>musico</span>
}
else if (Request.IsAuthenticated && ViewBag.UserType.Equals("Ouvinte"))
{
<span>ouvinte</span>
} else{
<span>teste</span>
}
</p>
HomeController
public ActionResult Index()
{
ViewBag.UserType = TempData["UserType"];
return View();
}
【问题讨论】:
-
@Silvermind 你能举个例子吗?对不起,我不明白你的想法
-
查看Index.cshtml 我第一次运行应用程序时,页面上会显示“teste”。在我登录应用程序后,索引上有断点,值为空,我会放一个屏幕imgur.com/upOyyq7
-
当我登录时,索引总是返回“Teste”
-
是的,我做了这个改变。当我注册一个新用户时,这一行显示以下错误: var userType = user.UserType;
System.NullReferenceException: Object reference not set to an instance of an object.我可以登录,但索引上显示“teste” .在调试中,我可以使用 UserName 字段,但不能使用 UserType。 -
第一条评论见:What is a NullReferenceException and how do I fix it? 第二条评论:当 UserName 有效而 UserType 无效时,数据库中未设置 UserType。
标签: c# asp.net asp.net-mvc-4 razor viewbag