2012-08-14 72 views
0

我似乎無法獲得我的視圖的編輯功能工作..我有一個頁面列出,一個頁面,顯示特定的細節,並在該頁面上,我應該能夠編輯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; } 
    } 

回答

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

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

2

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

0

每當我得到這個,我已經忘記了創建我的視圖模型參數的構造函數。我現在總是添加一個以防萬一需要而且我忘記了。

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