ASP.NET MVC Сложная модель привязки

1

Я пытаюсь использовать сложные типы объектов в привязке модели 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 имеют значение NULL. Однако при обновлении свойств объекта ALResults свойства получают из представления и прекрасно обновляют запись. Почему свойства объекта равны нулю при вставке записи?

  • 0
    При создании записи вы уверены, что свойства model.alResults не равны NULL? Включите написание всех команд MySQL для вывода в классе хранения EFContext, если вы используете Entity Framework и посмотрите, есть ли какие-либо ошибки MySQL, уведомления о сериализации или если команда Create Table имеет все свойства.
Теги:
razor
asp.net-mvc
asp.net-mvc-4

1 ответ

0

Попробуйте, как показано ниже. Используйте "виртуальный" объект "alResults".

public class InitialApplicantLevel2Model
    {
       //removed for clarity

        public virtual ALResults alResults { get; set; }

    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню