繁体   English   中英

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

[英]Using MVC4 Custom Model to return Properties from other Models

我正在使用SimpleMemberShip。 这是默认的UserProfile模型:

[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; }

如果将UserProfile指定为模型源,则我的WebGrid可以工作:

@model List<myApp.Models.UserProfile>

但这不起作用:

@model List<myApp.Models.GetUserDetail>

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

谢谢。

您将必须针对dataContext手动编写查询以检索实体,然后将其发送到视图。 创建具有所需所有属性的ViewModel

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中的ViewModel

我在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; }
}

然后,我将此代码添加到Controller中:

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()

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM