![](/img/trans.png)
[英]MVC4 model binding - Passing Custom View Models & values from view to controller
[英]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.