Передайте новые (пользовательские) данные идентификации пользователя в представление целевой страницы, чтобы отфильтровать данные, которые будут отображаться c # - PullRequest
0 голосов
/ 28 февраля 2019

Я использую встроенную авторизацию C # MVC.Я добавил настраиваемое поле "GroupId" к нему.Теперь я пытаюсь передать «GroupId» вошедшего в систему пользователя, чтобы показать конкретные данные пользователя.Я сделал контроллер Авторизация для страниц, которые будут отображаться после входа в систему. Я могу сохранить новый Regestation GroupId в базу данных, но не могу получить значение для вошедшего в систему пользователя.Я использую User.Identity.GetGroupId (), но получаю сообщение об ошибке.

Модель представления счета:

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace WebApplication1.Models
{
    public class ExternalLoginConfirmationViewModel
    {
        [Required]
        [Display(Name = "Email")]
        public string Email { get; set; }
        [Display(Name = "GroupId")]
        public int GroupId { get; set; }
    }

    public class ExternalLoginListViewModel
    {
        public string ReturnUrl { get; set; }
    }

    public class SendCodeViewModel
    {
        public string SelectedProvider { get; set; }
        public ICollection<System.Web.Mvc.SelectListItem> Providers { get; set; }
        public string ReturnUrl { get; set; }
        public bool RememberMe { get; set; }
    }

    public class VerifyCodeViewModel
    {
        [Required]
        public string Provider { get; set; }

        [Required]
        [Display(Name = "Code")]
        public string Code { get; set; }
        public string ReturnUrl { get; set; }

        [Display(Name = "Remember this browser?")]
        public bool RememberBrowser { get; set; }

        public bool RememberMe { get; set; }
        [Display(Name = "GroupId")]
        public int GroupId { get; set; }
    }

    public class ForgotViewModel
    {
        [Required]
        [Display(Name = "Email")]
        public string Email { get; set; }
    }

    public class LoginViewModel
    {
        [Required]
        [Display(Name = "Email")]
        [EmailAddress]
        public string Email { get; set; }

        [Required]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [Display(Name = "Remember me?")]
        public bool RememberMe { get; set; }
        [Display(Name = "GroupId")]
        public int GroupId { get; set; }
    }

    public class RegisterViewModel
    {
        [Required]
        [EmailAddress]
        [Display(Name = "Email")]
        public string Email { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }

        [Required]
        [Display(Name = "GroupId")]
        public int GroupId { get; set; }
    }

    public class ResetPasswordViewModel
    {
        [Required]
        [EmailAddress]
        [Display(Name = "Email")]
        public string Email { get; set; }

        [Required]
        [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
        [DataType(DataType.Password)]
        [Display(Name = "Password")]
        public string Password { get; set; }

        [DataType(DataType.Password)]
        [Display(Name = "Confirm password")]
        [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
        public string ConfirmPassword { get; set; }

        public string Code { get; set; }
    }

    public class ForgotPasswordViewModel
    {
        [Required]
        [EmailAddress]
        [Display(Name = "Email")]
        public string Email { get; set; }
    }}  

Контроллер устройства:

 [Authorize]
   public class DeviceController : Controller
   {
         [ActionName("Index")]
    public async Task<ActionResult> IndexAsync(string sortOrder, string currentFilter, string searchString, int? page)
    {

        Session["User"] = 18;
        ViewBag.CurrentSort = sortOrder;
        ViewBag.NameSortParm = String.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
        ViewBag.LastPingSortParm = sortOrder == "LastPing" ? "date_desc" : "LastPing";
        ViewBag.AddressSortParm = sortOrder == "Address" ? "date_desc" : "Address";
        ViewBag.IPSortParm = sortOrder == "IPaddress" ? "date_desc" : "IPaddress";
        if (searchString != null )
        {
            page = 1;
        }
        else
        {
            searchString = currentFilter;
        }

        ViewBag.CurrentFilter = searchString;


        var items = await DocumentDBRepository<Device>.GetDevicemapAsync( d => d.Id != null);
        if (!String.IsNullOrEmpty(searchString))
        {
            items = items.Where(d => d.Name.Contains(searchString));
        }

            switch (sortOrder)
            {

                case "name_desc":
                    items = items.OrderByDescending(d => d.Name);
                    break;
                case "LastPing":
                    items = items.OrderByDescending(d => d.LastPing);
                    break;
                case "date_desc":
                    items = items.OrderBy(d => d.LastPing);
                    break;
                case "Address":
                    items = items.OrderBy(d => d.Address);
                    break;
                case "Address_desc":
                    items = items.OrderByDescending(d => d.Address);
                    break;
                case "IP":
                    items = items.OrderBy(d => d.IPaddress);
                    break;
                case "IP_desc":
                    items = items.OrderByDescending(d => d.IPaddress);
                    break;
                default:

                    items = items.OrderBy(d => d.Name);
                    break;

        }
        int pageSize = 15;
        int pageNumber = (page ?? 1);
        return View(items.ToPagedList(pageNumber, pageSize));
    }

Просмотр индекса:

@model PagedList.IPagedList<WebApplication1.Models.Device>
@using PagedList.Mvc;
@using Microsoft.AspNet.Identity

<link href="~/Content/PagedList.css" rel="stylesheet" type="text/css" />

@{
    ViewBag.Title = "Devices"; }
<h2>List Of Devices</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<div class="form">
    @using (Html.BeginForm("Index", "Device", FormMethod.Get))

    {
        <p>
            Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
            <input type="submit" value="Search" />
        </p>
    }
</div>

<table class="table">
    <tr>
        <th>
            @Html.ActionLink(" Ip Address", "Index", new { sortOrder = ViewBag.IPSortParm })

        </th>
        <th width="30%">
            @Html.ActionLink("Name", "Index", new { sortOrder = ViewBag.NameSortParm })
        </th>
        <th>
            @Html.ActionLink("Address", "Index", new { sortOrder = ViewBag.AddressSortParm })

        </th>
        <th>
            @Html.ActionLink(" Last Ping", "Index", new { sortOrder = ViewBag.LastPingSortParm })

        </th>
        <th>
            Reports
        </th>
        <th>
        </th>
    </tr>

    @foreach (var item in Model)
    {
        if (item.GroupId == User.Identity.GetGroupId())
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.IPaddress)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Name)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Address)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.LastPing)
                </td>
                <td>
                    <i class="fa fa-car w3-large"></i>

                    <i class="fas fa-cloud-sun-rain w3-large"></i>
                    <i class="far fa-folder-open w3-large"></i>
                </td>
                <td>
                    @Html.ActionLink("Edit", "Edit", new { id = item.Id, GroupId = item.GroupId })
                </td>
            </tr>
           }
        }
    </table>

    Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount

    @Html.PagedListPager(Model, page => Url.Action("Index",
        new { page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.GroupSortParm }))

Я получаю следующую ошибку: Ошибка сервера в '/' Заявка.Ошибка компиляции Описание: во время компиляции ресурса, необходимого для обслуживания этого запроса, произошла ошибка.Пожалуйста, просмотрите следующие конкретные подробности ошибки и измените свой исходный код соответствующим образом.

Сообщение об ошибке компилятора: CS1061: «IIdentity» не содержит определения для «GetGroupId» и не может быть найден метод расширения «GetGroupId», принимающий первый аргумент типа «IIdentity» (если вы пропустили директиву usingили ссылка на сборку?)

Ошибка источника:

Строка 49: @foreach (var item в Model) Строка 50: {Строка 51:
if (item.GroupId)== User.Identity.GetGroupId ()) Строка 52: {Строка 53:

Исходный файл: T: \ LED Signs \ Документация \ Проекты \ Разработка приложений Azure \ GIT \ Ana29_1_19 \ WebApplication1 \ Views\ Device \ Index.cshtml Строка: 51

Показать подробный вывод компилятора:

Показать полный источник компиляции:

Информация о версии: Microsoft .NET Framework Версия: 4.0.30319;ASP.NET версия: 4.7.3282.0

...