Pet*_*ies 1 razor asp.net-mvc-3
我试图在视图中列出所有用户但没有成功.这里有很多问题涉及相同的问题,我已经尝试过大多数回复,但由于某种原因,我无法让它发挥作用.以下是我可以提出的最简单的实现,但错误消息与我使用的任何方法相同.
编译器错误消息:CS1061:'object'不包含'UserName'的定义,并且没有扩展方法'UserName'接受类型'object'的第一个参数(你是否缺少using指令或汇编引用?)
@{
ViewBag.Title = "Admin";
}
<ul>
@foreach (var user in Membership.GetAllUsers())
{
<li>Name: @user.UserName </li>
}
</ul>
Run Code Online (Sandbox Code Playgroud)
任何建议或意见,将不胜感激.非常感谢
Dar*_*rov 13
用MembershipUser而不是var.
@foreach (MembershipUser user in Membership.GetAllUsers())
{
<li>Name: @user.UserName</li>
}
Run Code Online (Sandbox Code Playgroud)
这就是说我希望你意识到这是一个完全的反MVC模式.从某些商店提取/获取数据不是视图责任.它们应该只使用以强类型视图模型的形式从控制器操作传递给它们的数据.
所以这是正确的方法.
与往常一样,您首先要定义一个视图模型,该模型将包含您需要在视图中显示的数据(在本例中为用户名列表):
public class UserViewModel
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后控制器动作:
public ActionResult Index()
{
var model = Membership
.GetAllUsers()
.Cast<MembershipUser>()
.Select(x => new UserViewModel
{
Name = x.UserName
});
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
然后是一个相应的强类型视图:
@model IEnumerable<UserViewModel>
<ul>
@Html.DisplayForModel()
</ul>
Run Code Online (Sandbox Code Playgroud)
以及为模型集合(~/Views/Shared/DisplayTemplates/UserViewModel.cshtml)的每个项目呈现给定用户的显示模板:
@model UserViewModel
<li>Name: @Model.Name</li>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3768 次 |
| 最近记录: |