如何使用 aspnet core 在视图中绑定嵌套的 属性
How to bind a nested property in a view with aspnet core
我开始学习AspNetCore,我想知道如何在视图中绑定一个嵌套的属性。
我有这两个对象
public partial class Club
{
public Guid Id { get; set; }
public string IdUser { get; set; }
public string Name { get; set; }
public string Position { get; set; }
public virtual ApplicationUser IdUserNavigation { get; set; }
}
public class UserViewModel
{
public string Id { get; set; }
public string UserName { get; set; }
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "Confirm Password")]
[DataType(DataType.Password)]
public string ConfirmPassword { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public Club Club { get; set; }
public List<SelectListItem> ApplicationRoles { get; set; }
[Display(Name = "Role")]
public string ApplicationRoleId { get; set; }
}
现在我想将 UserViewModel 绑定到视图
@model TestingViewModels.Users.UserViewModel
@using Testing.ViewModels.Roles
<form asp-action="AddUser" role="form">
@await Html.PartialAsync("_ModalHeader", new ModalHeader { Heading = "Add User" })
<div class="modal-body form-horizontal">
<div class="row">
<div class="col-lg-6">
<div class="form-group">
<label asp-for="Name" class="col-lg-3 col-sm-3 control-label"></label>
<div class="col-lg-6">
<input asp-for="Name" class="form-control" />
</div>
</div>
<div class="form-group">
<label asp-for="Email" class="col-lg-3 col-sm-3 control-label"></label>
<div class="col-lg-6">
<input asp-for="Email" class="form-control" />
</div>
</div>
<div class="form-group">
<label asp-for="ApplicationRoleId" class="col-lg-3 col-sm-3 control-label"></label>
<div class="col-lg-6">
<select asp-for="ApplicationRoleId" asp-items="@Model.ApplicationRoles" class="form-control">
<option>Please select</option>
</select>
</div>
</div>
</div>
....
<div class="col-lg-6">
<div class="form-group">
<!--THIS DON´T WORK-->
<label asp-for="Club.Name" class="col-lg-3 col-sm-3 control-label"></label>
<div class="col-lg-6">
<input asp-for="Club.Name" class="form-control" />
</div>
</div>
<div class="form-group">
<!--THIS DON´T WORK-->
<label asp-for="Club.Position" class="col-lg-3 col-sm-3 control-label"></label>
<div class="col-lg-6">
<input asp-for="Club.Position" class="form-control" />
</div>
</div>
</div>
</div>
</div>
@await Html.PartialAsync("_ModalFooter", new ModalFooter { })
</form>
如何绑定 Club.Name 和 Club.Position?
提前致谢。
乔丽妮丝
一旦对象被加载到内存中,您就可以在您的视图模型中引用它。
EF 的一个问题是加载通常需要 显式 加载。
例如:
(在此示例中,您引用的实体是单个实体而不是集合)
_dbContext.Entity(club).Reference(a => a.IdUserNavigation).Load();
为了完整起见,对于一个集合(项目列表),我们假设您的用户 属性 是像
这样的用户列表
public ICollection<ApplicationUser> IdUserNavigations {get;set;}
...
_dbContext.Entity(club).Collection(a => a.IdUserNavigations).Load();
注意集合是针对可枚举的,引用是针对单个实体的。
执行此操作后,您可以在传递视图模型时访问视图中的实体。
...
引用模型的方式与引用任何模型的方式相同 class。
<input asp-for="Club.Name" class="form-control" />
我开始学习AspNetCore,我想知道如何在视图中绑定一个嵌套的属性。
我有这两个对象
public partial class Club
{
public Guid Id { get; set; }
public string IdUser { get; set; }
public string Name { get; set; }
public string Position { get; set; }
public virtual ApplicationUser IdUserNavigation { get; set; }
}
public class UserViewModel
{
public string Id { get; set; }
public string UserName { get; set; }
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "Confirm Password")]
[DataType(DataType.Password)]
public string ConfirmPassword { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public Club Club { get; set; }
public List<SelectListItem> ApplicationRoles { get; set; }
[Display(Name = "Role")]
public string ApplicationRoleId { get; set; }
}
现在我想将 UserViewModel 绑定到视图
@model TestingViewModels.Users.UserViewModel
@using Testing.ViewModels.Roles
<form asp-action="AddUser" role="form">
@await Html.PartialAsync("_ModalHeader", new ModalHeader { Heading = "Add User" })
<div class="modal-body form-horizontal">
<div class="row">
<div class="col-lg-6">
<div class="form-group">
<label asp-for="Name" class="col-lg-3 col-sm-3 control-label"></label>
<div class="col-lg-6">
<input asp-for="Name" class="form-control" />
</div>
</div>
<div class="form-group">
<label asp-for="Email" class="col-lg-3 col-sm-3 control-label"></label>
<div class="col-lg-6">
<input asp-for="Email" class="form-control" />
</div>
</div>
<div class="form-group">
<label asp-for="ApplicationRoleId" class="col-lg-3 col-sm-3 control-label"></label>
<div class="col-lg-6">
<select asp-for="ApplicationRoleId" asp-items="@Model.ApplicationRoles" class="form-control">
<option>Please select</option>
</select>
</div>
</div>
</div>
....
<div class="col-lg-6">
<div class="form-group">
<!--THIS DON´T WORK-->
<label asp-for="Club.Name" class="col-lg-3 col-sm-3 control-label"></label>
<div class="col-lg-6">
<input asp-for="Club.Name" class="form-control" />
</div>
</div>
<div class="form-group">
<!--THIS DON´T WORK-->
<label asp-for="Club.Position" class="col-lg-3 col-sm-3 control-label"></label>
<div class="col-lg-6">
<input asp-for="Club.Position" class="form-control" />
</div>
</div>
</div>
</div>
</div>
@await Html.PartialAsync("_ModalFooter", new ModalFooter { })
</form>
如何绑定 Club.Name 和 Club.Position?
提前致谢。
乔丽妮丝
一旦对象被加载到内存中,您就可以在您的视图模型中引用它。 EF 的一个问题是加载通常需要 显式 加载。
例如: (在此示例中,您引用的实体是单个实体而不是集合)
_dbContext.Entity(club).Reference(a => a.IdUserNavigation).Load();
为了完整起见,对于一个集合(项目列表),我们假设您的用户 属性 是像
这样的用户列表 public ICollection<ApplicationUser> IdUserNavigations {get;set;}
...
_dbContext.Entity(club).Collection(a => a.IdUserNavigations).Load();
注意集合是针对可枚举的,引用是针对单个实体的。
执行此操作后,您可以在传递视图模型时访问视图中的实体。
...
引用模型的方式与引用任何模型的方式相同 class。
<input asp-for="Club.Name" class="form-control" />