gpt4 book ai didi

c# - SelectList当bindproperty需要的值是asp.net和entity framework中的一个类

转载 作者:太空宇宙 更新时间:2023-11-03 14:39:21 25 4
gpt4 key购买 nike

我有一个项目创建页面。该项目需要一个名称和一个客户。我正在使用 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-forselect 指定模型属性名称元素不是模型对象名称,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://learn.microsoft.com/en-us/aspnet/core/mvc/views/working-with-forms?view=aspnetcore-3.0#the-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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com