[英]ASP.NET MVC View for Object with Embedded Objects
我正在努力弄清楚如何為創建其他對象的對象創建視圖。
這是我要完成的工作的簡化示例:
public class Classroom
{
public int ID { get; set; }
public int RoomNumber { get; set; }
public string SchoolID { get; set; }
public School School { get; set; }
}
public class School
{
public int ID { get; set; }
public string Name { get; set; }
}
因此,當訪問用於創建新教室的視圖時,我希望用戶能夠輸入學校名稱。 然后,在提交表單后,我希望它嘗試將學校名稱解析為現有學校。 如果找到具有指定名稱的學校,它將在創建教室對象時使用該學校。 否則,它將創建一所新學校並將其添加到教室對象中。
解決此問題的最佳方法是什么?
ps我在Visual Studio 2013中使用最新的實體框架
創建一個ViewModel。
public class CreateClassroomModel
{
public string SchoolName { get; set; }
public int RoomNumber { get; set; }
}
public async Task<ActionResult> PostClassroom(CreateClassroomModel model)
{
var school = await _db.Schools
.FirstOrDefaultAsync(x => x.Name == model.SchoolName)
?? new School { Name = model.SchoolName };
var classroom = new Classroom
{
RoomNumber = model.RoomNumber,
School = school,
};
_db.Classrooms.Add(classroom);
await _db.SaveChangesAsync();
return RedirectToAction("CreateClassroomSuccess");
}
...那么您的視圖將只有用於輸入學校名稱和教室房間號的文本框。 當您發布表單時,上面的操作將執行您想要的操作。 如果找到名稱相匹配的學校,則使用該學校。 否則,它將創建一所新學校。 無論哪種方式,它總是會創建一個新的教室。
如果您不想使用EF6異步功能,請按以下步驟操作而不使用異步功能:
public ActionResult PostClassroom(CreateClassroomModel model)
{
var school = _db.Schools.FirstOrDefault(x => x.Name == model.SchoolName)
?? new School { Name = model.SchoolName };
var classroom = new Classroom
{
RoomNumber = model.RoomNumber,
School = school,
};
_db.Classrooms.Add(classroom);
_db.SaveChanges();
return RedirectToAction("CreateClassroomSuccess");
}
我假設您將擁有DbContext中的學校列表,因此當您在控制者的操作中獲得學校名稱時,您可以執行此操作。 假設您在控制器中的操作具有schoolName參數
using (var context = new MyDBContext())
{
var school = context.Schools().FirstOrDefault(x => x.Name == schoolName);
if (school == null)
{
// create new school
}
else
{
var classroom = new Classroom
{
School = school,
// set other properties
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.