Pas de constructeur sans paramètre défini pour cet objet - l'Impossibilité de Résoudre

Je suis nouveau en C# et MVC alors pardonne tout naiveness/stupidité. J'ai vu plusieurs posts traitant de l'erreur que j'ai et j'ai essayé toutes les solutions, mais ils ne semblent fonctionner dans mon cas. Merci de me guider vers la bonne voie pour résoudre ce problème.

De fond:
J'ai 2 modèles tblPrograms et tblReports.
Je suis en train de créer un simple formulaire où l'utilisateur peut créer un nouveau tblReport. Une partie du processus de création d'un nouveau tblReport est de sélectionner l'un tblProgram à partir d'une liste.

Code De Présentation:

Contrôleur:

    //GET: /Reports/

    public ViewResult New()
    {

        ProgramListModel progList = new ProgramListModel();
        tblReports2 report = new tblReports2();

        ExistingReportViewModel ervm = new ExistingReportViewModel(report,progList);

        return View(ervm);
    }

    [HttpPost]
    public ActionResult GenerateSQL(ExistingReportViewModel evrm)
    {
         evrm.Report.ProgramName = evrm.progList.selectedProgram;
        return View(evrm);
    }

Modèle De Vue:

 public class ExistingReportViewModel
{
    public tblReports2 Report { get; set; }       
    public ProgramListModel progList { get; set; }

    //public ExistingReportViewModel() { }
    public ExistingReportViewModel(tblReports2 report, ProgramListModel progList)
    {            
        this.Report = report;
        this.progList = progList;   
    }    
}

Modèles:

public class tblReports2
{

    [Key]
    public string ProgramName { get; set; }
    public string ReportDesc { get; set; }
    ....
}
public class ProgramListModel
{
    public SelectList progList;
    public string selectedProgram;

    public ProgramListModel() {
        ReportHelper helper = new ReportHelper();
        this.progList = helper.getProgramList();
    }

}

Méthode D'Assistance:

public SelectList getProgramList()
    {
        var programs = from p in this.DB.tblProgramsSet
                       select p;
        programs = programs.Where(s => s.ProgramType.Equals("RPT"));                      
        SelectList list = new SelectList(programs, "ProgramName", "ProgramDescription");
        return list;

    }

Vue:

@model ReportsSetup.Models.ExistingReportViewModel
@{
ViewBag.Title = "New";
}
New
@using (Html.BeginForm("GenerateSQL", "Reports"))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>ExistingReportViewModel</legend>
@Html.DropDownListFor(model=>model.progList.selectedProgram, Model.progList.progList)
<div class="editor-label">
@Html.LabelFor(model => model.Report.ReportDesc)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Report.ReportDesc)
@Html.ValidationMessageFor(model => model.Report.ReportDesc)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Report.Formerly)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Report.Formerly)
@Html.ValidationMessageFor(model => model.Report.Formerly)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Report.ExtendedDesc)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Report.ExtendedDesc)
@Html.ValidationMessageFor(model => model.Report.ExtendedDesc)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Report.ReportCode)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Report.ReportCode)
@Html.ValidationMessageFor(model => model.Report.ReportCode)
</div>
...
<input type="submit" value="Create" />
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>

Erreur:

![Exception Details: System.MissingMethodException: No parameterless constructor defined for this object.][1]

http://i.stack.imgur.com/GHJpG.jpg

Tentatives De Solutions:

  1. Refait le code à utiliser IEnumerable <tblPrograms> au lieu de
    SelectList dans ProgramListModel et de conversion d'
    IEnumerable en Vue à l'aide d'une fonction similaire à
    exemple ci-dessous:

    public static IEnumerable<SelectListItem> ToSelectListItems(
    this IEnumerable<Album> albums, int selectedId)
    {
    return 
    albums.OrderBy(album => album.Name)
    .Select(album => 
    new SelectListItem
    {
    Selected = (album.ID == selectedId),
    Text = album.Name,
    Value = album.ID.ToString()
    });
    }
  2. Refait le code à utiliser IEnumerable<SelectListItem> au lieu de
    SelectList dans ProgramListModel

Merci beaucoup d'Avance!!

OriginalL'auteur Sajjan Sarkar | 2012-07-10

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *