2012-02-27 2 views
1

Я знаю, что это было предложено раньше на многих многих случаи жизни, но я немного смущен, когда это происходит со мной ....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() 
     { 

     } 

} 

и простой и опубликовать действия контроллера, как это:

[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 и formcollection, но я должен сделать это в этом случае). Обычный ответ для этого случая будет «потому что вы не создали конструктор для RAssessment в своей модели», но, как вы можете видеть в моей модели, я уже сделал это, и когда я помещаю разбивку внутри пустого конструктора модели, actionresult DOES go там. Если я удалю параметр RAssessment внутри actionresult, он действительно работает, но я хочу передать данные модели в actionresult, а затем выполнить некоторые сложные проверки модели. Может ли кто-нибудь показать мне правильное направление? Благодарю. WML

ответ

2

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

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

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

+0

Если я использую Bind exclude, он разрешает проблему, но как я могу «повторно заполнить» данные мультиселективного списка обратно в модель, если есть какая-либо ошибка проверки модели? Должен ли я снова создать список мультиселектов с нуля? Спасибо – WML

+0

Вы можете получить от FormCollection или получить привязку к модели работы http://ittecture.wordpress.com/2009/04/30/tip-of-the-day-198-asp-net-mvc-listbox-controls/ – Tx3

+0

Спасибо Tx3 за советы ..... – WML

Смежные вопросы

 Смежные вопросы