0

我似乎无法让我的视图的编辑功能起作用..我有一个列出的页面,一个显示特定详细信息的页面,在该页面上,我应该能够编辑表单的信息..问题:当我运行应用程序时,它说:没有为此对象定义无参数构造函数。我究竟做错了什么...?

在家庭控制器中,我有:

编辑功能:

       [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);
  }

制度模式

  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; } 
   }
4

3 回答 3

2

该类是否有无Institution参数构造函数?如果不是,那将是问题所在。您正在将 an 传递InstitutionModel给编辑视图,因此 post 操作可能也应该采取 an 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

于 2012-08-14T15:01:39.687 回答
0

每当我得到这个时,我都忘记在我的视图模型上创建一个无参数的构造函数。我现在总是添加一个,以防万一我忘记了。

机构模型有吗?

于 2012-08-14T16:24:25.503 回答
0

是否可能需要将参数传递给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

编辑 2

我看到了您的编辑,并会这样说:如果您调用的方法是

public ActionResult ViewSchoolDetails(InstitutionModel institutionModel, int id) 

然后你必须向它传递一个类型的对象InstitutionModel和一个intas 参数,否则你会得到一个异常。意思是,你需要

RedirectToAction("ViewSchoolDetails", new {institutionModel = institutionModel, id = id});
于 2012-08-14T14:54:32.473 回答