【问题标题】:ASP.NET MVC Complex model bindingASP.NET MVC 复杂模型绑定
【发布时间】:2014-07-27 05:53:49
【问题描述】:

我正在尝试在 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; }
    } 

Repository 类创建新记录

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 对象时 属性从视图中获取值并完美地更新记录。 为什么插入记录时对象属性为空?

【问题讨论】:

  • 创建记录时,您确定model.alResults 属性不是空值吗?如果您使用实体框架并查看是否有任何 MySQL 错误、序列化通知或 Create Table 命令是否具有所有属性,则启用将所有 MySQL 命令写入 EFContext 保存类中的输出。

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

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

public class InitialApplicantLevel2Model
    {
       //removed for clarity

        public virtual ALResults alResults { get; set; }

    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2015-03-28
    • 1970-01-01
    • 2016-03-07
    相关资源
    最近更新 更多