Невозможно перечислить пользователей в представлении, используя MVC3 - PullRequest
1 голос
/ 16 июня 2011

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

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

@{
  ViewBag.Title = "Admin";
}
<ul>
  @foreach (var user in Membership.GetAllUsers())
  {
    <li>Name: @user.UserName </li>
  }
</ul>

Буду признателен за любые предложения или советы.Большое спасибо

1 Ответ

13 голосов
/ 16 июня 2011

Используйте MembershipUser вместо var.

@foreach (MembershipUser user in Membership.GetAllUsers())
{
    <li>Name: @user.UserName</li>
}

При этом, я надеюсь, вы понимаете, что это полная схема анти-MVC.Ответственность за извлечение / получение данных из некоторых магазинов не лежит на представлении.Они должны использовать только те данные, которые передаются им из действия контроллера в форме строго типизированной модели представления.

Так что вот правильный способ сделать это.

Как всегда выначнем с определения модели представления, которая будет содержать данные, которые вам необходимо отобразить в вашем представлении (в данном случае список имен пользователей):

public class UserViewModel
{
    public string Name { get; set; }
}

, затем действие контроллера:

public ActionResult Index()
{
    var model = Membership
        .GetAllUsers()
        .Cast<MembershipUser>()
        .Select(x => new UserViewModel
        {
            Name = x.UserName
        });
    return View(model);
}

, затем соответствующий строго типизированный вид:

@model IEnumerable<UserViewModel>
<ul>
    @Html.DisplayForModel()
</ul>

и шаблон отображения для данного пользователя, который будет отображаться для каждого элемента коллекции моделей (~/Views/Shared/DisplayTemplates/UserViewModel.cshtml):

@model UserViewModel
<li>Name: @Model.Name</li>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...