将ASP.NET标识用户标识传递给url [英] Pass ASP.NET identity user id to the url

查看:81
本文介绍了将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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆