首先使用VS'12 asp.net MVC4 C#InternetApplication与KendoUI和Simplemembership EF Code。
这就是VS让你开始的。
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");
.
.
.
这是我希望RedirectToAction
到我的控制器ChangeUsersInfo
控制器,并将其发送给新创建的用户的ID。
获取我尝试过的ID
1
var UserID = (from u in db.UserProfiles
where u.UserName == User.Identity.Name
select new
{
UserID = u.UserID
}).Single();
2
var userID = System.Web.Security.Membership.GetUser().ProviderUserKey;
返回RedirectToAction(“Edit”,“ChangeUsersInfo”,userID);
我也试过return RedirectToAction("Edit","ChangeUsersInfo");
看看它是否会让我在没有变量的情况下发送它。
出于某种原因
EDIT
,而是重定向到LOG IN
屏幕我的空值和失败重定向背后的原因是什么?
是数据库有用户
答案 0 :(得分:1)
var userID = System.Web.Security.Membership.GetUser().ProviderUserKey;
使用WebSecurity和System.Web.Security项目仅适用于后续请求,因为您尚未将auth cookie发送回客户端(这是从中提取数据的地方)。鉴于此,您甚至不必在重定向URL中发送用户的用户ID ...他们已登录,您可以在控制器/操作中获取它。通过从auth票证中获取userId,您现在无需检查URL中传递的用户ID是否实际上是当前登录的用户。
示例:
登录方式
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (!ModelState.IsValid)
{
//send em back with the errors
Return View();
}
try
{
WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "ChangeUsersInfo");
}...
}
更改用户信息控制器
[Authorize]
public ActionResult Index()
{
var userId = WebSecurity.CurrentUserId;
var model = GetUserInfoService.GetUserInfo(userId);
Return View(model);
}