无法使用MVC3列出视图中的用户

时间:2011-06-16 10:14:46

标签: asp.net-mvc-3 razor

我正在尝试列出视图中的所有用户但没有成功。这里有很多问题涉及相同的问题,我已经尝试过大多数回复,但由于某种原因,我无法让它发挥作用。以下是我可以提出的最简单的实现,但错误消息与我使用的方法相同。

编译器错误消息:CS1061:'object'不包含'UserName'的定义,并且没有扩展方法'UserName'接受类型'object'的第一个参数可以找到(你是否缺少using指令或程序集)引用?)

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

任何建议或意见将不胜感激。非常感谢

1 个答案:

答案 0 :(得分:13)

使用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>