2014-07-27 115 views
1

我想在ASP.NET MVC模型绑定中使用复杂的对象类型。我 需要插入和更新学生记录与考试成绩ASP.NET MVC复杂模型绑定

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; } 
    } 

库类创建新的记录

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; 
      } 
     } 

更新记录

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; 
      } 
     } 

查看

<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> 

学生的详细信息插入时没有问题,但ALResults 属性为空。但是,更新记录ALResults对象时,将从视图中获取值并完美更新记录。 插入记录时为什么对象属性为空?

+0

创建记录时确定'model.alResults'属性不是空值?如果使用实体框架并查看是否有任何MySQL错误,序列化通知或者“创建表”命令是否具有所有属性,则启用将所有MySQL命令写入EFContext控件类中的输出。 –

回答

0

请按照如下所示尝试。对您的“alResults”对象使用“虚拟”。

public class InitialApplicantLevel2Model 
    { 
     //removed for clarity 

     public virtual ALResults alResults { get; set; } 

    }