Entityframework +MVC + Строительные леса

Я не хочу модель представления. У меня есть модель, как показано ниже

public class Person
    {
        #region private variables
        private string _firstName;
        private string _lastName;
        private string _middleName;
        private Gender _gender;
        #endregion
        #region public properties
        public string FirstName
        {
            get { return _firstName; }
            set { _firstName = value; }
        }
        public string LastName
        {
            get { return _lastName; }
            set { _lastName = value; }
        }
        public string MiddleName
        {
            get { return _middleName; }
            set { _middleName = value; }
        }
        public virtual Gender Gender
        {
            get { return _gender; }
            set { _gender = value; }
        }
        #endregion
    }
 public class Student:Person
    {
        #region private variables
        private int _id;
        private DateTime _dateOfBirth;
        private bool _isDeleted;
        private Guradians _guardian;
        #endregion
        #region public properties
        public int ID
        {
            get { return _id; }
            set { _id = value; }
        }
        public DateTime DateOfBirth
        {
            get { return _dateOfBirth; }
            set { _dateOfBirth = value; }
        }
        public bool IsDeleted
        {
            get { return _isDeleted; }
            set { _isDeleted = value; }
        }
        public virtual Guradians Guardian
        {
            get { return _guardian; }
            set { _guardian = value; }
        }
        #endregion
    }
public class Gender
    {
        #region private variable
        private int _id;
        private string _description;
        private bool _isDeleted;
        #endregion
        #region public properties
        public bool IsDeleted
        {
            get { return _isDeleted; }
            set { _isDeleted = value; }
        }

        public string Description
        {
            get { return _description; }
            set { _description = value; }
        }

        public int ID
        {
            get { return _id; }
            set { _id = value; }
        }
        #endregion
    }
public class Guradians:Person
    {
        #region private variable
        private int _id; 
        private Relationship _relationship;
        #endregion
        #region public properties
        public int ID
        {
            get { return _id; }
            set { _id = value; }
        }
        public Relationship Relationship
        {
            get { return _relationship; }
            set { _relationship = value; }
        }

        #endregion
    }
public class Relationship
    {
        #region private variables
        private int _id;
        private string _description;
        #endregion
        #region public properties
        public int ID
        {
            get { return _id; }
            set { _id = value; }
        }


        public string Description
        {
            get { return _description; }
            set { _description = value; }
        }
        #endregion
    }

Я пытаюсь создать представление, используя модель студента, шаблон скаффолда - Создать. Создать шаблон не создает HTML-помощники для сложных свойств. Я новичок в MVC. Пожалуйста помоги.

вид выглядит

@model PracticeWebApp.Models.Student

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>Student</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.DateOfBirth)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.DateOfBirth)
            @Html.ValidationMessageFor(model => model.DateOfBirth)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.IsDeleted)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.IsDeleted)
            @Html.ValidationMessageFor(model => model.IsDeleted)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.FirstName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.FirstName)
            @Html.ValidationMessageFor(model => model.FirstName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.LastName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.LastName)
            @Html.ValidationMessageFor(model => model.LastName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.MiddleName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.MiddleName)
            @Html.ValidationMessageFor(model => model.MiddleName)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

2 ответа

Используйте первичный ключ и внешний ключ. Если вы хотите сохранить базу данных, вы можете сначала ввести код структуры объекта или базу данных.

Определить метод поста контроллера

Я провел эксперименты по влиянию наследования на строительные леса, чтобы создать представление из модели без аннотаций данных (первичные / внешние ключи и т. Д.), И обнаружил, что ваша проблема может быть решена с помощью наследования. Gender базовый класс в Person учебный класс:

public class Person : Gender
{
    public String FirstName { get; set; }
    public String LastName { get; set; }
    public String MiddleName { get; set; }
    public virtual Gender Gender { get; set; }
}

Наследство включает в себя все Gender свойства участника в Person класс, используя ссылку на виртуальное свойство Gender класс, следовательно, он будет генерировать помощники HTML для Description имущество:

<div class="editor-label">
    @Html.LabelFor(model => model.Description)
</div>
<div class="editor-field">
    @Html.EditorFor(model => model.Description)
    @Html.ValidationMessageFor(model => model.Description)
</div>

NB: так как оба Gender а также Student класс есть IsDeleted свойство с точно таким же типом данных (т.е. bool), IsDeleted используется в виду относится к Student класс вместо Gender,

Другие вопросы по тегам