我知道它已經在很多很多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
如果我使用綁定排除,它確實可以解決問題,但如果存在任何模型驗證錯誤,如何將多選數據數據重新填充回模型?我是否必須再次從頭開始創建多選列表?謝謝 – WML 2012-02-28 00:50:13
你可以從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
謝謝Tx3的提示..... – WML 2012-02-28 12:04:35