2014-07-27 6 views
1

J'essaie d'utiliser des types d'objets complexes dans la liaison de modèle ASP.NET MVC. Je besoin d'insérer et mettre à jour les dossiers des élèves avec résultats d'examenLiaison de modèle ASP.NET MVC Complexe

public class InitialApplicantLevel2Model 
    { 
     public InitialApplicantLevel2Model() 
     { 
      alResults = new ALResults(); 
     } 

     public int InitialApplicantLevel2ID { get; set; } 
     public int? IntakeID { get; set; } 
     public string ApplicantName { get; set; } 
     public string ContactNumber { get; set; } 
     public string School { get; set; } 

     public string NIC { get; set; } 
     public string Passport { get; set; } 
     public string Sex { get; set; } 

     public ALResults alResults { get; set; } 

    } 

    public class ALResults 
    { 
     public int ResultsID { get; set; } 
     public int InitialApplicantLevel2ID { get; set; } 
     public string Stream { get; set; } 
     public string Grading { get; set; } 
     public string IndexNo { get; set; } 
     public int? Year { get; set; } 
     public int? Attempt { get; set; } 
     public double? ZScore { get; set; } 
     public string Medium { get; set; } 
    } 

classe Repository Créer un nouveau dossier

public bool Create(InitialApplicantLevel2Model model) 
     { 
      try 
      { 
       using (context = new SIMSDBAPPEntities()) 
       { 
        using (TransactionScope scope = new TransactionScope()) 
        { 
         tblInitialApplicantLevel2 tb = new tblInitialApplicantLevel2(); 
         tb.NIC = model.NIC; 
         tb.Passport = model.Passport; 
         tb.Sex = model.Sex; 

         context.tblInitialApplicantLevel2.Add(tb); 


         tblALResult results = new tblALResult(); 
         results.Attempt = model.alResults.Attempt; 
         results.Grading = model.alResults.Grading; 
         results.IndexNo = model.alResults.IndexNo; 
         results.InitialApplicantLevel2ID = tb.InitialApplicantLevel2ID; 
         results.Stream = model.alResults.Stream; 
         results.Year = model.alResults.Year; 
         results.Medium = model.alResults.Medium; 
         results.ZScore = model.alResults.ZScore; 

         context.tblALResults.Add(results); 


         Save(); 


         scope.Complete(); 
        } 
       } 

       return true; 
      } 
      catch (Exception ex) 
      { 

       throw ex; 
      } 
     } 

mise à jour Enregistrez

public bool Update(InitialApplicantLevel2Model model) 
     { 
      try 
      { 
       using (context = new SIMSDBAPPEntities()) 
       { 
        using (TransactionScope scope = new TransactionScope()) 
        { 
         var tb = (from tba in context.tblInitialApplicantLevel2 
            where tba.InitialApplicantLevel2ID == model.InitialApplicantLevel2ID 
            select tba).SingleOrDefault(); 

         tb.NIC = model.NIC; 
         tb.Passport = model.Passport; 
         tb.Sex = model.Sex; 

         var results = (from tbr in context.tblALResults 
             where tbr.InitialApplicantLevel2ID ==  model.InitialApplicantLevel2ID 
             select tbr).SingleOrDefault(); 

         results.Attempt = model.alResults.Attempt; 
         results.Grading = model.alResults.Grading; 
         results.IndexNo = model.alResults.IndexNo; 
         results.InitialApplicantLevel2ID = tb.InitialApplicantLevel2ID; 
         results.Stream = model.alResults.Stream; 
         results.Year = model.alResults.Year; 
         results.Medium = model.alResults.Medium; 
         results.ZScore = model.alResults.ZScore; 

         Save(); 


         scope.Complete(); 


        } 
       } 

       return true; 
      } 
      catch (Exception ex) 
      { 

       throw ex; 
      } 
     } 

Voir

<tr><td colspan="6"><hr /><b>G.C.E. (A/L) Results</b></td></tr> 
    <tr> 
     <td>Year: </td> 
     <td>@Html.TextBoxFor(o=>o.alResults.Year)</td> 
     <td>Index No: </td> 
     <td>@Html.TextBoxFor(o=>o.alResults.IndexNo)</td> 
     <td>Medium: </td> 
     <td>@Html.TextBoxFor(o=>o.alResults.Medium)</td> 
    </tr> 
    <tr> 
     <td>Stream: </td> 
     <td>@Html.TextBoxFor(o=>o.alResults.Stream)</td> 
     <td>Attempt: </td> 
     <td>@Html.TextBoxFor(o=>o.alResults.Attempt)</td> 
     <td>Zscore: </td> 
     <td> 
     @Html.TextBoxFor(o=>o.alResults.ZScore) 

     </td> 
    </tr> 

Les détails de l'étudiant sont insérés sans problème, mais les propriétés ALResults sont null. Cependant, lors de la mise à jour d'un enregistrement, les propriétés de l'objet ALResults obtiennent les valeurs de la vue et mettent à jour l'enregistrement parfaitement. Pourquoi les propriétés de l'objet sont-elles nulles lors de l'insertion de l'enregistrement?

+0

Lors de la création d'un enregistrement, êtes-vous sûr que les propriétés 'model.alResults' ne sont pas nulles? Activez l'écriture de toutes les commandes MySQL dans la classe de conservation EFContext si vous utilisez Entity Framework et voyez s'il y a des erreurs MySQL, des avis de sérialisation ou si la commande Create Table a toutes les propriétés. –

Répondre

0

Veuillez essayer comme indiqué ci-dessous.Utilisez "virtuel" avec votre objet "alResults".

public class InitialApplicantLevel2Model 
    { 
     //removed for clarity 

     public virtual ALResults alResults { get; set; } 

    } 
Questions connexes