Я использую встроенную авторизацию 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