我正在使用 Razor 頁面做一個小專案。這是關于汽車的。所以我從兩個類創建了兩個腳手架專案:Maker和Model.
這是Maker課
public class Maker
{
public int Id { get; set; }
public string Name { get; set; }
}
這就是Model課堂
public class Model
{
public int Id { get; set; }
public Maker Maker { get; set; }
public string Name { get; set; }
}
public class CreateModel : PageModel
{
private readonly ArchivioItalianeDaCorsa.Data.ApplicationDbContext _context;
public List<SelectListItem> makers { get; set; }
public CreateModel(ArchivioItalianeDaCorsa.Data.ApplicationDbContext context)
{
_context = context;
}
public IActionResult OnGet()
{
caseAutomobilistiche = _context.makers.Select(maker => new
SelectListItem
{
Text = maker.Name,
Value = maker.Id.ToString()
}).ToList();
return Page();
}
[BindProperty]
public Modello Modello { get; set; }
// To protect from overposting attacks, see https://aka.ms/RazorPagesCRUD
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
_context.Model.Add(Modello);
await _context.SaveChangesAsync();
return RedirectToPage("./Index");
}
}
最后但并非最不重要的是,html
<h1>Create</h1>
<h4>Modello</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Model.Maker" class="control-label"></label>
<select class="form-select" aria-label="Marca select" asp-items="Model.makers" asp-for="Model.Maker" name="Marca">
<option>Seleziona una marca</option>
</select>
<label asp-for="Model.Name" class="control-label"></label>
<input asp-for="Model.Name" class="form-control" />
<span asp-validation-for="Model.Name" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
當我嘗試創建新的Model. 在onGet我查詢資料庫以在選擇標記中顯示所有可能的制造商時,但我無法將選擇系結到需要保存的物件。
上課Model錯了嗎?
PS:代碼最初是用意大利語撰寫的,我在提問時已經翻譯了它,所以如果有不清楚的地方請告訴我,我會解決問題
uj5u.com熱心網友回復:
在您的選擇串列項中,選項欄位中的Maker.Id值是 ,因此傳遞給模型的值是整數,而不是物件。
在撰寫約束時最好是明確的,Model像這樣重寫你的類;
public class Model
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public int MakerId { get; set; }
[ForeignKey("MakerId")]
public Maker Maker { get; set; }
}
在上面的代碼中,我們明確地指示物體框架 Model 具有不可為空的外鍵 MakerId。此屬性將是資料庫中的一列,您可以在其中保存選擇串列中的值。
重寫模型后嘗試搭建一個新的剃須刀頁面。
uj5u.com熱心網友回復:
asp-items="Model.makers" asp-for="Model.Maker" name="Marca"
1.根據asp-items="Model.makers" 你的html,你使用maker系結資料。在您的情況OnGet下,將汽車變成制造商
2.洗掉name屬性,因為asp-for會生成name來系結資料。
3.asp-for="Model.Maker"改成asp-for="Model.Maker.Id"
你可以得到MakerId,然后做你的其他事情。
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/426951.html
標籤:网 实体框架 asp.net 核心 .net-core 剃刀页面
