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}); 
+0

viewschool的细节工作,因为我返回的模型,我已经映射到 – user1179083 2012-08-14 15:13:08

+0

它是否有意义? – user1179083 2012-08-14 15:32:28

+0

不是。抛出的错误究竟是什么时候? – 2012-08-14 15:34:42

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

+0

Mapper.Map (institutionModel,institutionEntity); 给出了一个错误... – user1179083 2012-08-14 15:12:23

+0

我试图修复它到 var model = Mapper.Map (institutionEntity);'''''但是它返回这个错误: 异常详细信息:System.ArgumentException:参数字典包含'NCARB.Web.Areas中的方法'System.Web.Mvc.ActionResult ViewSchoolDetails(Int32)'的非空类型'System.Int32'的参数'id'的空项。 Admin.Controllers.ToolsController”。可选参数必须是引用类型,可为空类型,或者声明为可选参数。 参数名称:参数 – user1179083 2012-08-14 15:17:01

+0

@Iam Routledge:是否有意义如何解释? – user1179083 2012-08-14 15:32:50

每当我得到这个,我已经忘记了创建我的视图模型参数的构造函数。我现在总是添加一个以防万一需要而且我忘记了。

InstitutionModel有吗?

+0

InstitutionModel。CS /类有: '公共类InstitutionModel { 公共InstitutionModel() { NAABAccreditations =新列表(); } public int Id {get;组; } public string Name {get;组; } public bool IsNAAB { get {return NAABAccreditations.Any(); } } public string Website {get;组; } public AddressModel Address {get;组; } public IEnumerable NAABAccreditations {get;组; } } } – user1179083 2012-08-14 16:30:09

+0

那么AddressModel呢?或认证模式。你所有的viewmodel都有吗? – 4imble 2012-08-14 16:36:09

+0

是的,他们都这样做 – user1179083 2012-08-14 16:59:57