2016-04-09 1 views
0

J'apprends quelques concepts dans asp.net mvc. J'utilise le framework d'entité et l'édition communautaire 2013 de visual studio. Je crée une application de démonstration pour apprendre. J'ai créé le modèle selon le lien this. Les modèles sont les suivants. Voici le modèle de cours. Le cours a le département comme clé étrangère. Un département peut avoir plusieurs cours.Comment recevoir dynamiquement des valeurs ajoutées de la vue au contrôleur dans ASP.NET MVC?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace ManyItemsDemo2.Models 
{ 
    public class Course 
    { 
     public int CourseID { get; set; } 
     public string Title { get; set; } 
     public string Credits { get; set; } 
     public int DepartmentID { get; set; } 

     public virtual Department Department { get; set; } 
    } 
} 

Ceci est un modèle de département. Le modèle de département est simple. Il est associé au modèle de cours.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace ManyItemsDemo2.Models 
{ 
    public class Department 
    { 
     public Department() 
     { 
      this.Cources = new HashSet<Course>(); 
     } 
     public int DepartmentID { get; set; } 
     public string Name { get; set; } 
     public double Budget { get; set; } 
     public string Administrator { get; set; } 

     public virtual ICollection<Course> Cources { get; set; } 
    } 
} 

Il existe une classe de contexte. Maintenant, j'ai utilisé scafolding et créé des contrôleurs et des vues avec la fonctionnalité CRUD. Je peux créer un département et des cours en vues. Maintenant, je dois assigner plusieurs cours lors de la création des départements. J'ai donc créé un modèle de vue. Ici, un département a beaucoup de cours.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using ManyItemsDemo2.Models; 

namespace ManyItemsDemo2.ViewModels 
{ 
    public class DeptCourses 
    { 
     public Department Department { get; set; } 
     public IEnumerable<Course> Course { get; set; } 
    } 

} 

ainsi j'ai créé une nouvelle vue. Qui peut accepter plus de cources tout en créant le département. Le résultat de la vue est comme ça. The View

Le bouton plus a un script qui provient de ma question précédente here. Le script utilise jquery et clone le menu déroulant et ajoute.

Le problème commence à partir d'ici. Quand j'ajoute plus d'une liste déroulante, disons 3, je reçois null dans le contrôleur, bien que je reçoive trois éléments, un seul élément a une valeur, d'autres sont nuls. Voir l'image pour plus de précisions.

Image for clarification.

Pourquoi cela se produit? PS: Je pourrais ignorer les scénarios en temps réel car il s'agit d'une application de démonstration pour apprendre et effacer les concepts d'une à plusieurs relations avec cadre d'entité avec l'aide de MVC.

+0

Vous ne savez pas pourquoi vous avez accepté la réponse à la question précédente alors que cela n'aurait jamais fonctionné. Il crée des contrôles de formulaire qui n'ont aucune relation avec votre modèle. Reportez-vous aux réponses [ici] (http://stackoverflow.com/questions/29161481/post-a-form-array-without-successful/29161796#29161796) et [ici] (http://stackoverflow.com/questions/ 28019793/submit-same-partial-view-called-multiple-times-data-to-controller/28081308 # 28081308) pour certaines options –

+0

Mais dans votre cas, il semble que vous ne voulez que le 'CouseId' associé à votre dropdownlist, dans lequel Si vous voyez la propriété du modèle, elle doit être 'IEnumerable Courses'. Mais une approche beaucoup mieux serait d'afficher chaque cours avec une case à cocher associée afin que l'utilisateur peut simplement les sélectionner (votre mise en œuvre actuelle aurait d'autres problèmes tels que l'utilisateur peut sélectionner des doublons) –

+0

@StephenMuecke j'ai testé en face avant. ce script ajoutait tomber si accepté. Je vérifie les liens que vous avez suggérés. –

Répondre

0

This travaillé pour moi. Juste changé le nom dans le script et ajouté un tableau de chaînes dans httppost.