将ASP.NET标识用户标识传递给url [英] Pass ASP.NET identity user id to the url
本文介绍了将ASP.NET标识用户标识传递给url的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
大家好
我实现了asp.net身份用户表的编辑页面
我想将Id传递给行动以找到用户
但是我应该在网址的末尾添加Id以给我视图
我该怎么做?
或者如果有更好的方法可以给我打电话视图!
谢谢
// edit.cshtml
@using(Html.BeginForm()){
@ Html.HiddenFor(x = > x.Id)
< div class = form-group >
< label>电子邮件< / label >
@Html。 TextBoxFor(x = > x.Email, new {@class = form-control})
< / div >
我尝试了什么:
// UserController
使用系统;
使用 System.Collections.Generic;
使用 System.Linq;
使用 System.Web;
使用 System.Web.Mvc;
使用 AuthenticationUsers.Models;
使用 System.Threading.Tasks;
使用 Microsoft.AspNet.Identity;
使用 Microsoft.AspNet.Identity.Owin;
命名空间 AuthenticationUsers.Controllers
{
public class UserController:Controller
{
public ActionResult Index()
{
return 查看(UserManager.Users);
}
public async 任务< ActionResult>编辑( string Id)
{
WorldUser user = await UserManager.FindByIdAsync( ID);
if (user!= null )
{
ViewBag。 Id = Id;
return 查看(用户);
}
else
{
return RedirectToAction( 索引);
}
}
[HttpPost]
public async 任务< ActionResult>编辑(字符串 Id,字符串电子邮件,字符串密码)
{
WorldUser user = await UserManager.FindByIdAsync(Id);
if (user!= null )
{
user。 Email =电子邮件;
IdentityResult validEmail
= await UserManager.UserValidator.ValidateAsync(user);
if (!validEmail.Succeeded)
{
AddErrorsFromResult(validEmail);
}
IdentityResult validPass = null ;
if (密码!= 字符串 .Empty)
{
validPass
= await UserManager.PasswordValidator.ValidateAsync(password);
if (validPass.Succeeded)
{
user.PasswordHash =
UserManager.PasswordHasher.HashPassword(password);
}
else
{
AddErrorsFromResult(validPass);
}
}
if ((validEmail.Succeeded&& validPass == null )||(validEmail.Succeeded
&& password!= string .Empty&& validPass.Succeeded))
{
IdentityResult result = await UserManager.UpdateAsync(user);
if (result.Succeeded)
{
return RedirectToAction( 索引);
}
else
{
AddErrorsFromResult(result);
}
}
}
else
{
ModelState.AddModelError ( , 找不到用户);
}
return 查看(用户);
}
private void AddErrorsFromResult(IdentityResult result)
{
foreach (字符串错误 result.Errors)
{
ModelState.AddModelError( ,错误) ;
}
}
私人 AppUserManager UserManager
{
get
{
return HttpContext.GetOwinContext()。GetUserManager< AppUserManager>();
}
}
}
}
// routeconfig
使用系统;
使用 System.Collections.Generic;
使用 System.Linq;
使用 System.Web;
使用 System.Web.Mvc;
使用 System.Web.Routing;
命名空间 AuthenticationUsers
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection路由)
{
routes.IgnoreRoute( {resource} .axd / {* pathInfo});
routes.MapRoute(
name: 默认,
url: {controller} / {action} / {id},
默认值: new {controller = app,action = 索引,id = UrlParameter.Optional}
);
}
}
}
解决方案
我希望你能保证这些使用Authorize属性和其他安全性编辑用户页面。
但是要回答你的问题,创建一个FindUser页面并有一组控件让编辑器选择一个用户编辑。
然后,当识别出要编辑的用户时(例如,在网格或搜索结果中),将查看模型从FindUser页面发送到编辑操作一个字符串
例如
[授权(角色= Admin)] // 安全检查示例
[HttpGet]
public 行动FindUser()
{
UsersContext = new ApplicationDbContext();
var userNames = UsersContext.Users.Select(x => x.Name).ToList(); // 这可以是您的视图模型。
return 查看(userNames);
}
FindUser视图
@ model List<串GT;
foreach ( var userName in model)
{
< a href = @ Url.Action( edit = ,new {username = userName})> @userName < / a >
}
< / string >
Hi all
I Implemented a edit page for asp.net identity user table
I want to pass Id to action to find the user
but I should add Id to the end of the Url to give me the view
how can I do that?
or tel me if there is better way to take the view!
thanks
//edit.cshtml
@using (Html.BeginForm()) {
@Html.HiddenFor(x => x.Id)
<div class="form-group">
<label>Email</label>
@Html.TextBoxFor(x => x.Email, new { @class = "form-control" })
</div>
What I have tried:
//UserController
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using AuthenticationUsers.Models;
using System.Threading.Tasks;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
namespace AuthenticationUsers.Controllers
{
public class UserController : Controller
{
public ActionResult Index()
{
return View(UserManager.Users);
}
public async Task<ActionResult> Edit(string Id)
{
WorldUser user = await UserManager.FindByIdAsync(Id);
if (user != null)
{
ViewBag.Id = Id;
return View(user);
}
else
{
return RedirectToAction("Index");
}
}
[HttpPost]
public async Task<ActionResult> Edit(string Id, string email, string password)
{
WorldUser user = await UserManager.FindByIdAsync(Id);
if (user != null)
{
user.Email = email;
IdentityResult validEmail
= await UserManager.UserValidator.ValidateAsync(user);
if (!validEmail.Succeeded)
{
AddErrorsFromResult(validEmail);
}
IdentityResult validPass = null;
if (password != string.Empty)
{
validPass
= await UserManager.PasswordValidator.ValidateAsync(password);
if (validPass.Succeeded)
{
user.PasswordHash =
UserManager.PasswordHasher.HashPassword(password);
}
else
{
AddErrorsFromResult(validPass);
}
}
if ((validEmail.Succeeded && validPass == null) || (validEmail.Succeeded
&& password != string.Empty && validPass.Succeeded))
{
IdentityResult result = await UserManager.UpdateAsync(user);
if (result.Succeeded)
{
return RedirectToAction("Index");
}
else
{
AddErrorsFromResult(result);
}
}
}
else
{
ModelState.AddModelError("", "User Not Found");
}
return View(user);
}
private void AddErrorsFromResult(IdentityResult result)
{
foreach (string error in result.Errors)
{
ModelState.AddModelError("", error);
}
}
private AppUserManager UserManager
{
get
{
return HttpContext.GetOwinContext().GetUserManager<AppUserManager>();
}
}
}
}
//routeconfig
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace AuthenticationUsers
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "app", action = "Index", id = UrlParameter.Optional }
);
}
}
}
解决方案
I hope you will be securing these Edit user pages with Authorize attribute and other security.
But to answer your question, create a FindUser page and have a set of controls which lets the editor select a user to edit.
Then when the user to be edited is identified (e.g. in a grid, or search result) send a view model from the FindUser page to the Edit action as a string
e.g.
[Authorize(Roles = "Admin")] // Example security check [HttpGet] public Action FindUser() { UsersContext = new ApplicationDbContext(); var userNames = UsersContext.Users.Select(x=>x.Name).ToList(); // This can be your view model. return View(userNames); }
FindUser view
@model List<string> foreach(var userName in model) { <a href="@Url.Action(" edit=", new { username = userName })">@userName</a> } </string>
这篇关于将ASP.NET标识用户标识传递给url的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文