MVC 3编辑功能不工作
我似乎无法获得我的视图的编辑功能工作..我有一个页面列出,一个页面,显示特定的细节,并在该页面上,我应该能够编辑form.PROBLEM的信息:当我运行应用程序时它说:没有为此对象定义的无参数构造函数。我究竟做错了什么...?MVC 3编辑功能不工作
在主控制器我有:
编辑功能:
[HttpGet]
public ViewResult EditSchoolDetails(int id)
{
var institution = _educationRepository.GetInstititionById(id);
var model = (Mapper.Map<Institution, InstitutionModel>(institution));
return View(model);
}
后 [HttpPost]
public ActionResult EditSchoolDetails(InstitutionModel institutionModel, int id)
{
if (ModelState.IsValid) {
//_get from repository and add to instituion
var institution = _educationRepository.GetInstititionById(institutionModel.Id);
// Map from the view model back to the domain model
var model = Mapper.Map<Institution, InstitutionModel>(institution);
//UpdateModel(model);
SaveChanges();
return RedirectToAction("ViewSchoolDetails", new {institutionModel = institutionModel, id = id});
}
return View(institutionModel);
}
InstitutionModel
public class InstitutionModel {
public InstitutionModel() {
NAABAccreditations = new List<AccreditationModel>();
}
public int Id { get; set; }
public string Name { get; set; }
public bool IsNAAB { get { return NAABAccreditations.Any(); } }
public string Website { get; set; }
public AddressModel Address { get; set; }
public IEnumerable<AccreditationModel> NAABAccreditations { get; set; }
}
是有可能你需要传递一个参数到ViewSchoolDetails
?我注意到你在return语句中注释到你传递了一个id,但是在你使用的return语句中,你没有传入任何东西。
编辑
这(从下面的评论):
parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult ViewSchoolDetails(Int32)
......告诉我,你需要一个参数传递给ViewSchoolDetails
EDIT 2
我看到你的编辑,并会说:如果你打电话的方法是
public ActionResult ViewSchoolDetails(InstitutionModel institutionModel, int id)
,那么你必须将它传递InstitutionModel
类型的对象和int
作为参数或你会得到一个异常。含义,你需要
RedirectToAction("ViewSchoolDetails", new {institutionModel = institutionModel, id = id});
Institution
类是否有无参数构造函数?如果不是,那将是问题所在。你是传递一个InstitutionModel
到编辑视图,这样才能使后期的行动也许应该采取InstitutionModel
过,那么你就可以映射回原来的Institution
型号:
public ActionResult EditSchoolDetails(int id, InstitutionModel institutionModel)
{
if (ModelState.IsValid)
{
//add to database and save changes
Institution institutionEntity = _educationRepository.GetInstititionById(institution.Id);
// Map from the view model back to the domain model
Mapper.Map<InstitutionModel, Institution>(institutionModel, institutionEntity);
SaveChanges();
return RedirectToAction("ViewSchoolDetails",);
}
return View(institutionModel);
}
还要注意如何返回视图模型回查看模型状态是否无效,否则您将失去所有表单值!
这里有一个类似的问题也可能帮助:ASP.NET MVC: No parameterless constructor defined for this object
Mapper.Map
我试图修复它到 var model = Mapper.Map
@Iam Routledge:是否有意义如何解释? – user1179083 2012-08-14 15:32:50
每当我得到这个,我已经忘记了创建我的视图模型参数的构造函数。我现在总是添加一个以防万一需要而且我忘记了。
InstitutionModel有吗?
InstitutionModel。CS /类有: '公共类InstitutionModel { 公共InstitutionModel() { NAABAccreditations =新列表
那么AddressModel呢?或认证模式。你所有的viewmodel都有吗? – 4imble 2012-08-14 16:36:09
是的,他们都这样做 – user1179083 2012-08-14 16:59:57
viewschool的细节工作,因为我返回的模型,我已经映射到 – user1179083 2012-08-14 15:13:08
它是否有意义? – user1179083 2012-08-14 15:32:28
不是。抛出的错误究竟是什么时候? – 2012-08-14 15:34:42