Ошибка 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();
}
На моей странице просмотра.. у него есть сокращение страницы:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/MasterPage/Template.Master" Inherits="System.Web.Mvc.ViewPage<xxxx.Models.RAssessment>" %>
Когда происходит передача в представлении, это вызывает RAssessment actionresult, но по какой-то причине дает мне печально известное "конструктор без параметров, определенный для этого объекта". (Я знаю, это звучит странно, чтобы передать ОБА модель и форму коллекции, но мне действительно нужно сделать это в этом случае). Обычный ответ для этого случая будет "потому что вы не создали конструктор для оценки RA в вашей модели", но, как вы можете видеть в моей модели, я уже сделал это, и когда я помещаю разбивку внутри пустого конструктора модели, результат действия ДАЕТ там. Если я удаляю параметр RAssessment из actionresult, он работает, но я хочу передать данные модели в actionresult, а затем выполнить некоторые сложные проверки модели. Кто-нибудь может показать мне правильное направление? Благодарю. WML
1 ответ
Я думаю, что вы бы избавились от ошибки, если MultiSelectList
будет иметь конструктор без параметров, или вы бы добавили [Bind(Exclude="NonCA, CA")]
выше вашей модели взгляда. Тогда вы получите эти свойства пустыми, когда привязка произойдет в действии, помеченном как [HttpPost]
,
Причина всего этого в том, что когда у вас есть HttpPost
он пытается воссоздать RAssessment ra
и все свойства / поля внутри него со значениями, предоставленными скрытыми полями, текстовыми полями и т. д. К сожалению, в настоящее время невозможно воссоздать NonCA и / или CA.
Если вы проверите MSDN, то увидите, что MultiSelectList не имеет конструктора без параметров.