我對如何構建模型類和表單感到困惑。使用相同型別的兩個(將來可能會更多)屬性。我認為使用 IEnumerable 更明顯,但是當要放入一個可以使用的表單時,我無法做到這一點。
主要思想是有一個學生表格,我可以在其中為學生定義兩名教師(例如數學和生物)。*請注意,我需要始終為每個學生創建新教師,包括特定的學科和課堂。未加載/已創建的。
public class Student
{
// other properties like Id, Name
public Teacher MathTeacher { get; set; }
public Teacher BiologyTeacher { get; set; }
// or
public List<Teacher> Teachers { get; set; }
}
public class Teacher
{
// other properties like Id, Name
public int SubjectId { get; set; }
public int ClassroomId { get; set; }
}
但是如果我使用這兩個屬性,我相信 Entity Framework 無法知道確切的老師來獲得這個。那么,如何使用 IEnumerable 屬性從這樣的表單中讀取資料:
<select>我應該使用所有的asp-for="???"還是正確的方法?
<h6>Math Teacher</h6>
<div class="col-12 col-md-4">
<label class="form-label">Subject</label>
<select class="form-select" asp-items="@(new SelectList(Model.Subjects, "Id", "Name"))">
<option disabled selected>Select the subject</option>
</select>
</div>
<div class="col-12 col-md-4">
<label class="form-label">Classroom</label>
<select class="form-select" asp-items="@(new SelectList(Model.Classrooms, "Id", "Name"))">
<option disabled selected>Select the classroom</option>
</select>
</div>
<h6>Biology Teacher</h6>
<div class="col-12 col-md-4">
<label class="form-label">Subject</label>
<select class="form-select" asp-items="@(new SelectList(Model.Subjects, "Id", "Name"))">
<option disabled selected>Select the subject</option>
</select>
</div>
<div class="col-12 col-md-4">
<label class="form-label">Classroom</label>
<select class="form-select" asp-items="@(new SelectList(Model.Classrooms, "Id", "Name"))">
<option disabled selected>Select the classroom</option>
</select>
</div>
提交表單后,我想像這樣加載模型:
學生:
- 編號:3
- 名稱:'aaaa'
- 教師:
- id 1,名稱:'xxxx',subjectId:3,classicId:1,
- id 3,名稱:'zzzz',subjectId:54,classicId:1
還是出于兩個屬性的目的?
學生:
- 編號:3
- 名稱:'aaaa'
- mathTeacher:id 1,名稱:'xxxx',subjectId:3,classicId:1,
- 生物學教師:id 3,姓名:'zzzz',subjectId:54,classicId:1
我只是無法獲得任何類似的例子。
uj5u.com熱心網友回復:
但是,如果我使用這兩個屬性,我相信 Entity Framework 無法知道確切的老師來獲得這個
實際上可以成功地系結和區分兩個屬性。
這是您可以遵循的作業演示:
模型
public class Student
{
// other properties like Id, Name
public Teacher MathTeacher { get; set; }
public Teacher BiologyTeacher { get; set; }
public List<Subject> Subjects { get; set; }
public List<Classroom> Classrooms { get; set; }
}
public class Subject
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Classroom
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Teacher
{
// other properties like Id, Name
public int SubjectId { get; set; }
public int ClassroomId { get; set; }
}
查看(創建.cshtml)
@model Student
<h6>Math Teacher</h6>
<form method="post" asp-action="Create">
<div class="col-12 col-md-4">
<label class="form-label">Subject</label>
<select class="form-select" asp-for="MathTeacher.SubjectId" asp-items="@(new SelectList(Model.Subjects, "Id", "Name"))">
<option disabled selected>Select the subject</option>
</select>
</div>
<div class="col-12 col-md-4">
<label class="form-label">Classroom</label>
<select class="form-select" asp-for="MathTeacher.ClassroomId" asp-items="@(new SelectList(Model.Classrooms, "Id", "Name"))">
<option disabled selected>Select the classroom</option>
</select>
</div>
<h6>Biology Teacher</h6>
<div class="col-12 col-md-4">
<label class="form-label">Subject</label>
<select class="form-select" asp-for="BiologyTeacher.SubjectId" asp-items="@(new SelectList(Model.Subjects, "Id", "Name"))">
<option disabled selected>Select the subject</option>
</select>
</div>
<div class="col-12 col-md-4">
<label class="form-label">Classroom</label>
<select class="form-select" asp-for="BiologyTeacher.ClassroomId" asp-items="@(new SelectList(Model.Classrooms, "Id", "Name"))">
<option disabled selected>Select the classroom</option>
</select>
</div>
<input type="submit" value="Post"/>
</form>
控制器
注意:這里對資料進行了硬編碼,方便測驗,您可以自己從資料庫中獲取資料。
[HttpGet]
public IActionResult Create()
{
//hard-coded for easy testing....
//set the value for the selectlist
var model = new Student()
{
Subjects = new List<Subject>()
{
new Subject(){Id=1,Name="sub1"},
new Subject(){Id=2,Name="sub2"},
new Subject(){Id=3,Name="sub3"}
},
Classrooms = new List<Classroom>()
{
new Classroom(){Id=1,Name="room1"},
new Classroom(){Id=2,Name="room2"},
new Classroom(){Id=3,Name="room3"}
}
};
return View(model);
}
[HttpPost]
public IActionResult Create(Student model)
{
//do your stuff....
return View();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/530292.html
標籤:asp.net-mvcasp.net 核心剃刀实体框架核心
上一篇:嘗試激活“x.Areas.xController”時無法決議“Microsoft.AspNetCore.Identity.UserManager`1[x.AppUser]”型別的服務
下一篇:如何在C#中動態映射兩個類屬性
