2017-05-09 1 views
-1

J'ai des problèmes avec ListBoxFor ... Cela fonctionne correctement avec la requête Get, il charge la liste et présélectionne les valeurs sélectionnées mais lorsque l'utilisateur édite le formulaire et soumet la page, elle renvoie null; il ne renvoie pas les valeurs sélectionnées ... Quelqu'un peut-il aider? Je suis très nouveau dans la programmation en général et je ne peux pas comprendre cela. Ceci est mon ProjectDetailsViewModel:ListBoxFor renvoie des valeurs nulles lors de la soumission de la page

public class ProjectDetailsViewModel 
    { 
     public string ReturnMessage { get; set; } 
     public Project Project { get; set; } 
     public List<ProjSubIndustryMaster> SubIndustries { get; set; } 
     public List<ProjIndustryMaster> Industries { get; set; } 
     public List<Potential> Potentials { get; set; } 
     public List<ProjectCategoryMaster> Categories { get; set; } 
     public List<ProjectResources> ProjectManagers { get; set; } 


     public List<ProjectResources> SalesManagers { get; set; } 

     public List<ProjectOriginationMaster> OriginationList { get; set; } 
     public List<MasterProject> MasterProjects { get; set; } 
     public List<ProjectStatusMaster> ProjectStatusList { get; set; } 
     public List<PrimaryMaterials> PrimaryMaterialList { get; set; } 
     public List<ProjectMaterialMaster> MaterialList { get; set; } 
     public List<PrimaryServices> PrimaryServiceList { get; set; } 
     public List<ServiceCodeMaster> ServiceList { get; set; } 
     public List<PrimarySources> PrimarySourceList { get; set; } 
     public List<SourceCodeMaster> SourceList { get; set; } 
     public List<ProjTechnologyTypeMaster> TechnologyTypesList { get; set; } 
     public List<PrimaryTargets> PrimarytargetList { get; set; } 
     public List<TargetCodeMaster> TargetCodeList { get; set; } 
     public List<ProjectTypeMaster> ProjectTypesList { get; set; } 
     public List<ProjectComment> Comments { get;set; } 


     public List<string> SelectedServices 
     { 
      get 
      { 
       var serviceList1 = Project?.ProjectPricings?.Where(x => x.ProjectId == Project.Id && !string.IsNullOrWhiteSpace(x.ServiceCode)) 
         .Select(x => x.ServiceCode) 
         .ToList(); 
       var serviceList2 = Project?.Services?.Select(x => x.ProjServiceCode).ToList(); 
       var serviceList = new List<string>(); 
       if (serviceList1 != null) serviceList.AddRange(serviceList1); 
       if (serviceList2 != null) serviceList.AddRange(serviceList2); 
       return serviceList; 
      } 
     } 
    } 
} 

seulement à des fins de clarté: Je suis le chargement du listBox avec des données issues d'une table maître (consultation) afin que l'utilisateur peut avoir « toutes » les options disponibles au choix par exemple: Table ProjectMaterialMaster qui a 2 colonnes - Id et Material ... En d'autres termes, les valeurs sélectionnées ne sont pas tirées de la même table que les données du listBox. Les tables ressembler à ceci:

ProjectMaterialMasterId MaterialCode 
     1       A 
     2       C 
    ... 
    ProjectMaterialId  ProjectId  MaterialCode 
     1      4118   C 
     2      5342   C 
     3      5647   A 
     4      4118   B 
... 

La 1ère table a tous les matériaux disponibles et la deuxième table est une table de correspondance et relie tous les projets à leur matériel associé ...

C'est mon point de vue:

<td class="control-input"> 
      @{ 
       var materials = Model.Project?.Materials.Select(x=>x.ProjMaterialCode); 
      } 
      @Html.ListBoxFor(m => materials, new MultiSelectList(Model.MaterialList, "ProjMaterialCode", "ProjMaterialCode", materials), new {@class = "listbox"}) 
     </td> 

C'est le contrôleur:

[HttpPost] 
     public ActionResult UpdateProjectView(ProjectDetailsViewModel projectViewModel) 
     { 

      if (!ModelState.IsValid) 
      { 

       projectViewModel.ReturnMessage = @"Error! Update Failed."; 
       return GetProjectView(projectViewModel.ReturnMessage, projectViewModel.Project.Id); 
      } 
      if (projectViewModel.Project.Id != null) 
      { 
       var success = ProjectDataAccess.UpdateProject(projectViewModel.Project); 
       projectViewModel.ReturnMessage = success ? @"Project Updated Successfully" : @"Error! Update Failed"; 
      } 
      else if(projectViewModel.Project.Id == null) 
      { 
       var success = ProjectDataAccess.AddProject(projectViewModel.Project); 
       projectViewModel.ReturnMessage = success ? @"Project Added Successfully" : @"Error! Insert Failed"; 
      } 
      return GetProjectView(projectViewModel.ReturnMessage, projectViewModel.Project.Id); 
     } 
+0

Parce que vous la création d'un ''