2012-02-27 28 views
1

我知道它已經在很多很多occassions問過,但我遇到這種情況時我有點迷茫「這個對象沒有定義參數的構造函數」 ......MVC2錯誤

我有這樣一個視圖模型這樣的:

public class RAssessment 
    { 
     [HiddenInput] 
     public string rid { get; set; } 

     [HiddenInput] 
     public string NextPageAction { get; set; } 

     [HiddenInput] 
     public string PrevPageAction { get; set; } 

     [HiddenInput] 
     public string CodeType { get; set; } 

     public MultiSelectList CA { get; set; } 

     public MultiSelectList NonCA { get; set; } 

     public List<SelectListItem> AXM { get; set; } 

     public List<SelectListItem> IntOrders { get; set; } 

     public List<SelectListItem> IntLang { get; set; } 

     public List<SelectListItem> IntLang2 { get; set; } 


     //Get RAssessment details 
     public RAssessment(int id) 
     { 
      //get details 
     } 


     public RAssessment() 
     { 

     } 

} 

和簡單的GET和POST控制器的操作是這樣的:

[HttpGet] 
     public ActionResult RAssessment(int id) 
     { 
      RAssessment ra = new RAssessment(id);    
      return View("RAssessment", ra);    
     } 

     [HttpPost] 
     public ActionResult RAssessment(RAsessment ra, FormCollection formdata) 
     {    
      if (ModelState.IsValid) 
      { 
       : 
       return RedirectToAction(blah); 
      } 
      return View(); 
     } 

在我的網頁瀏覽。它有頁面declartion:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/MasterPage/Template.Master" Inherits="System.Web.Mvc.ViewPage<xxxx.Models.RAssessment>" %> 

當對視圖進行提交時,它會調用actionresult RAssessment,但由於某種原因,它給了我臭名昭着的「爲此對象定義的無參數構造函數」。 (我知道傳遞BOTH模型和表單集合聽起來很奇怪,但在這種情況下我需要做)。這種情況下的正常答案是「因爲你沒有在你的模型中爲RAssessment創建一個構造函數」,但正如你在我的模型中可以看到的,我已經完成了它,當我在空模型構造函數中放入一個細分時,actionresult會去那裏。如果我刪除actionresult中的RAssessment參數,它確實有效,但我確實想要在actionresult中傳遞模型數據,然後執行一些複雜的模型驗證。任何人都可以告訴我正確的方向嗎?謝謝。 WML

回答

2

我想你會擺脫錯誤,如果MultiSelectList將無參數的構造函數,或者你會添加[Bind(Exclude="NonCA, CA")]以上的視圖模型。然後,在標記爲[HttpPost]的操作中發生綁定時,您會將這些屬性設爲null。

所有這一切的原因是,當你有HttpPost它試圖重新創建RAssessment ra及其內的所有屬性/領域與提供隱藏字段,文本字段等值。不幸的是,目前它無法重新創建NonCA和/或CA.

如果您查看MSDN,您可以看到MultiSelectList沒有無參數的構造函數。

+0

如果我使用綁定排除,它確實可以解決問題,但如果存在任何模型驗證錯誤,如何將多選數據數據重新填充回模型?我是否必須再次從頭開始創建多選列表?謝謝 – WML 2012-02-28 00:50:13

+0

你可以從FormCollection中獲取或獲取模型綁定的工作http://ittecture.wordpress.com/2009/04/30/tip-of-the-day-198-asp-net-mvc-listbox-controls/ – Tx3 2012-02-28 07:09:19

+0

謝謝Tx3的提示..... – WML 2012-02-28 12:04:35