我是ASP.NET MVC的初学者,目前我将EF与数据库优先方法结合使用来完成工作。一切顺利,每个模型都有其控制器和视图文件。我想在视图上保存多模型数据时遇到问题。
就我而言:
Create.cshtml
,用户可以在其中输入老师的详细信息和工作经历,并且可以将其保存到自己的表中。因此,我使用元组并遵循(Multiple models in a view)和(Two models in one view in ASP MVC 3)的操作。
结果,我在视图(仅界面)上成功创建了教师详细信息和工作经历。teacher
,employmentHistory
)中。现在,当我保存输入时,什么也没有发生。 我想我需要在控制器零件上做一些事情,请给我一些有关如何做的想法。
预先感谢
答案 0 :(得分:0)
首先,欢迎您使用StackOverflow!
您是正确的,应该在控制器部分上做些事情。
ViewModel
。通过这样做,您可以按照视图所需的任何方式从数据库中投影数据。同样,使用这种方法,您不会返回完整的实体,也许那里有一些敏感信息。您还可以从模型验证中受益。 (例如,如果在某个时候需要从另一个实体添加另一个字段怎么办?)ViewModel
,然后将数据保存在数据库中。由于您没有提供任何类的模型信息,因此在下面给出一个示例。无论哪种方式(遵循的视图模型或元组示例),都应更改控制器代码,类似于我在下面编写的代码。
public class TeacherViewModel
{
//teacher details
[Required]
public int TeacherId {get; set;}
[Required]
public string TeacherName {get; set;}
// {...}
//teacher employment info
//here you can have a list of information or the last entry in the history,
//or what's required to add a new entry
public string LastWorkPlace {get; set;}
public DateTime From {get; set;}
public To {get; set; }
//{...}
}
public class TeacherController: Controller
{
//{...}
[HttpPost]
public ActionResult SaveTeacherInfo(TeacherViewModel model){
if (ModelState.IsValid) {
var teacher = new TeacherEntity
{
TeacherId = model.TeacherId, //if update otherwise leave blank
TeacherName = model.TeacherName
//{...}
};
//your context name here
_dbContext.Teachers.Add(teacher);
var teacherEmploymentInfo = new TeacherEmploymentHistory
{
TeacherId = teacher.TeacherId,
LastWorkPlace = model.LastWorkPlace,
From = model.From,
To = model.To
//{...}
};
_dbContext.TeachersEmploymentInfo.Add(teacherEmploymentInfo);
_dbContext.SaveChanges();
//_dbContext.SaveChangesAsync(); if using async await
}
return View(model); //return any validation errors from the view model
// to the user to fix.
}
}
如果您打算将ErrorHandler
用作全局过滤器,并且不打算从控制器返回自定义错误(例如,BusinessException或DatabaseException),则不需要try..catch
块,否则,您应该将代码包装在try..catch
块中。