我有一个项目创建页面。该项目需要一个名称和一个客户。我正在使用 Entity Framework Core(Code First)并且有“Project”和“Client”模型,Project 模型中客户端的属性是;
public Client Client { get; set; }
当我第一次制作页面时,属性是错误的;
public int Client { get; set; }
现在,当我为项目模型创建创建页面时,它使用了不正确的属性。现在,在我更正了项目模型之后,当我尝试将项目添加到数据库时,未在选择列表中选择客户端值(它说该值为空,确实如此)。
这是填充选择列表的代码;
public void PopulateClientsDropDownList()
{
var Clients = from c in _context.Clients
orderby c.ClientName
select c;
ClientList = Clients.Select(x => new SelectListItem
{
Text = x.ClientName,
Value = x.id.ToString()
}).ToList();
}
这是实际页面的代码
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Project.ProjectName" class="control-label"></label>
<input asp-for="Project.ProjectName" class="form-control" />
<span asp-validation-for="Project.ProjectName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Project.Client" class="control-label"></label>
<select asp-for="Project.Client" asp-items="Model.ClientList" class="form-control">
<option value="">-- Select Client --</option>
</select>
<span asp-validation-for="Project.Client" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
这是模型
public class Project
{
[Key]
public int Id { get; set; }
[Required]
public string ProjectName { get; set; }
//Dates
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime CreateDate { get; set; }
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime UpdateDate { get; set; }
//Relationships
[Required]
public Client Client { get; set; }
public virtual List<Spread> Spreads { get; set; }
}
public class Client
{
[Key]
public int id { get; set; }
[Required]
public string ClientName { get; set; }
}
谢谢你的帮助
最佳答案
Select Tag Helper
asp-for
为 select 指定模型属性名称元素不是模型对象名称,asp-items
指定了 option元素。
尝试改变你的 Project
模型如下:
public class Project
{
[Key]
public int Id { get; set; }
[Required]
public string ProjectName { get; set; }
//Dates
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTime CreateDate { get; set; }
[Required]
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime UpdateDate { get; set; }
//Relationships
[Required]
public int Clientid { get; set; }
public Client Client { get; set; }
public virtual List<Spread> Spreads { get; set; }
}
页面模型
public IActionResult OnGet()
{
var Clients = from c in _context.Clients
orderby c.ClientName
select c;
ClientList = Clients.Select(x => new SelectListItem
{
Text = x.ClientName,
Value = x.id.ToString()
}).ToList();
return Page();
}
[BindProperty]
public Project Project { get; set; }
[BindProperty]
public List<SelectListItem> ClientList { get; set; }
创建页面
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Project.ProjectName" class="control-label"></label>
<input asp-for="Project.ProjectName" class="form-control" />
<span asp-validation-for="Project.ProjectName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Project.Client" class="control-label"></label>
<select asp-for="Project.Clientid" asp-items="Model.ClientList" class="form-control">
<option value="">-- Select Client --</option>
</select>
<span asp-validation-for="Project.Clientid" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
关于Select tag helper,可以引用以下链接:
https://www.learnrazorpages.com/razor-pages/forms/select-lists
关于c# - SelectList当bindproperty需要的值是asp.net和entity framework中的一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58067175/