使用 MVC4 自定义模型从其他模型返回属性
本文关键字:模型 返回 属性 其他 自定义 使用 MVC4 | 更新日期: 2023-09-27 18:31:07
我正在使用SimpleMemberShip。这是默认的用户配置文件模型:
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
}
我想创建一个模型,以便跨多个表从数据库中获取所有用户详细信息:
public class GetUserDetail
{
[Key]
[ReadOnly(true)]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public int RoleId { get; set; }
public string RoleName { get; set; }
[ReadOnly(true)]
public DateTime CreateDate { get; set; }
public DateTime PasswordChangedDate { get; set; }
}
目前似乎是不可能的。我正在尝试在我的网站上填写管理员访问权限的 WebGrid。我相信可以以某种方式完成,但也许我以错误的方式去做。
这是我的控制器:
public ActionResult DashBoard()
{
using (var context = new AppContext())
{
return View(context.GetUserDetails.ToList());
}
}
这是我的上下文属性:
// Account Model DB Set...
public DbSet<GetUserDetail> GetUserDetails { get; set; }
如果我将用户配置文件指定为模型源,我的 WebGrid 将正常工作:
@model List<myApp.Models.UserProfile>
但这不起作用:
@model List<myApp.Models.GetUserDetail>
是否可以实现自定义模型来跨越多个已实现的表?
谢谢。
您必须手动编写针对 dataContext 的查询以检索实体,然后将其发送到视图。创建具有所需所有属性的视图模型
using (var context = new AppContext())
{
var userDetailsViewModels = new UserDetailsViewModel
return View(context.GetUserDetails
.Join(dataContext.SomeOtherTable,
u => u.Ut, o => o.UserId,
(u,o) => new UserDetailsViewModel { Name = u.Name, CreatinnDate = o.CreationDate }
)
);
}
如果您想了解自定义模型,则可能需要查看ViewModel。什么是 mvc 中的视图模型
我在Parv Sharma的帮助下得到了这个工作。虽然这个答案只是让我走上了正确的轨道,但我的实际解决方案却大不相同。
我添加了一个模型:
public class UserProfileData
{
public int UserId { get; set; }
public string UserName { get; set; }
public DateTime CreateDate { get; set; }
public DateTime LastPasswordFailureDate { get; set; }
public DateTime PasswordChangedDate { get; set; }
}
然后我把这段代码添加到控制器:
using (var context = new AppContext())
{
string sqlcommand = "SELECT UserProfile.UserId, UserProfile.UserName, webpages_Membership.CreateDate, webpages_Membership.LastPasswordFailureDate, webpages_Membership.PasswordChangedDate "
+ "FROM UserProfile CROSS JOIN webpages_Membership CROSS JOIN webpages_UsersInRoles "
+ "WHERE (UserProfile.UserId='1') ";
return View(context.Database.SqlQuery<UserProfileData>(sqlcommand).ToList());
}
在我看来:
@model List<myApp.Models.UserProfileData>
@{
var grid = new WebGrid(Model);
}
@grid.GetHtml()
老实说,我希望这比这容易一些。我的问题是角色数据库中的表没有与之关联的模型。
也许其他人可以提供更好的解决方案?
我仍然需要做一些格式化等等。