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

是否可以实现自定义模型来跨越多个已实现的表?

谢谢。

使用 MVC4 自定义模型从其他模型返回属性

您必须手动编写针对 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()

老实说,我希望这比这容易一些。我的问题是角色数据库中的表没有与之关联的模型。

也许其他人可以提供更好的解决方案?

我仍然需要做一些格式化等等。