Ошибка mvc2: «для этого объекта не определен конструктор без параметров» - PullRequest
1 голос
/ 27 февраля 2012

Я знаю, что об этом спрашивали много раз, но я немного растерялся, когда это происходит со мной ....

У меня есть такая модель вида:

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>" %>

Когда происходит отправка представления, он вызывает RAressessment в результате действия, но по какой-то причине дает мне печально известное «конструктор без параметров, определенный для этого объекта».(Я знаю, это звучит странно, чтобы передать ОБА модель и форму коллекции, но мне действительно нужно сделать это в этом случае).Обычный ответ для этого случая будет «потому что вы не создали конструктор для оценки RA в вашей модели», но, как вы можете видеть в моей модели, я уже сделал это, и когда я помещаю разбивку внутри пустого конструктора модели, результат действия ДОЛЖЕН идтитам.Если я удаляю параметр RAssessment из actionresult, он работает, но я хочу передать данные модели в actionresult, а затем выполнить некоторые сложные проверки модели.Кто-нибудь может показать мне правильное направление?Благодарю.WML

1 Ответ

2 голосов
/ 27 февраля 2012

Я думаю, вы бы избавились от ошибки, если бы MultiSelectList имел бы конструктор без параметров или вы добавили бы [Bind(Exclude="NonCA, CA")] над вашей моделью представления. Тогда вы получите эти свойства пустыми, когда привязка произойдет в действии, помеченном [HttpPost].

Причина всего этого заключается в том, что когда у вас есть HttpPost, он пытается воссоздать RAssessment ra и все свойства / поля внутри него со значениями, предоставленными скрытыми полями, текстовыми полями и т. Д. К сожалению, в настоящее время он не может восстановить -создание NonCA и / или CA.

Если вы проверите MSDN, вы увидите, что MultiSelectList не имеет конструктора без параметров.

...