amir.nazarizadeh Ответов: 1

Пасс ASP.NET identity идентификатор пользователя для url-адреса


Всем привет
Я реализовал страницу редактирования для asp.net таблица идентификационных данных пользователя
Я хочу передать Id в действие, чтобы найти пользователя
но я должен добавить Id в конец Url-адреса, чтобы дать мне представление
как я могу это сделать?
или позвоните мне, если есть лучший способ посмотреть!
спасибо

//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>


Что я уже пробовал:

//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 }
            );
            
        }
    }
}

1 Ответов

Рейтинг:
0

njammy

Я надеюсь, что вы будете защищать эти страницы редактирования пользователей с помощью атрибута авторизации и других средств безопасности.

Но чтобы ответить на ваш вопрос, создайте страницу FindUser и имейте набор элементов управления, который позволяет редактору выбрать пользователя для редактирования.

Затем, когда пользователь, подлежащий редактированию, идентифицирован (например, в сетке или результатах поиска), отправьте модель представления со страницы FindUser в действие редактирования в виде строки
напр.

[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
@model List<string>
foreach(var userName in model)
{
    <a href="@Url.Action(" edit=", new { username = userName })">@userName</a>
}
</string>