簡體   English   中英

在ASP .Net MVC中查看模型數據

[英]View Model data in view in ASP .Net MVC

在“我的項目”中,有兩個域模型類:Student.cs和Department.cs。 學生班和部門班之間存在多對一的關系。

public class Student
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int StudentId { get; set; }
    public String LastName { get; set; }
    public String FirstName { get; set; }
    public String UserName { get; set; }
    public String Password { get; set; }

    [ForeignKey("Department")]
    public int DepartmentID { get; set; }

}

 public class Department
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int DepartmentID { get; set; }

        [Required(ErrorMessage="Department Name cannot be empty")]
        public String DepartmentName { get; set; }

        [Required(ErrorMessage = "Department Code cannot be empty")]
        public String DepartmentCode { get; set; }

        public virtual ICollection<Student> Students { get; set; }
    }

現在,為了顯示全名而不是View中的名稱組件,我可以想到一個StudentViewModel。

//View Model
public class StudentViewModel
{
    public Student Student { get; set; }

    public int StudentId { get; set; }

    [Display(Name="StudentName")]
    [Required(ErrorMessage="Student Name cannot be left blank")]
    public String StudentFullName
    {
        get
        {
            return String.Format("{0} {1}", Student.FirstName, Student.LastName);
        }
        set
        {
            if (StudentFullName.Length > 1)
            {
                string[] tokens = StudentFullName.Split(' ');
                Student.FirstName = tokens[0];
                Student.LastName = tokens[tokens.Length - 1];
            }
        }
    }

    public String UserName { get; set; }

    [DataType(DataType.Password)]
    public String Password { get; set; }

    [DataType(DataType.Password)]
    [Compare("Password",ErrorMessage="Passwords do not match")]
    [Display(Name="Confirm Password")]
    public String C_Password { get; set; }
}

在上下文數據庫初始化器類中,以下是我的seed方法:

  protected override void Seed(StudentContext context)
        {
            var departments = new List<Department>
            {
                new Department {DepartmentID=1,DepartmentName="CSE",DepartmentCode="CS101"},
                new Department {DepartmentID=2,DepartmentName="ECE",DepartmentCode="EC197"},
                new Department {DepartmentID=3,DepartmentName="MECH",DepartmentCode="MC202"}
            };

            departments.ForEach(d => context.Departments.Add(d));
            context.SaveChanges();

            var students = new List<StudentViewModel> {
                new StudentViewModel {StudentId=1,StudentFullName = "Zack Dyas",UserName ="zack_dyas",DepartmentID=1,Password ="zack123"},
                new StudentViewModel {StudentId=2,StudentFullName = "Abraham D'Pedro",UserName ="ab_dpedro",DepartmentID=2,Password ="ab123"}
            };

            students.ForEach(s => context.Students.Add(s));
            context.SaveChanges();
}

在視圖中,如何顯示部門名稱而不是2個學生記錄模型中的部門ID?

ViewModel表示它是DTO ,數據傳輸對象,不是數據庫實體,而是具有您要定位的特定視圖所需的屬性的類。
在大多數情況下,每個視圖應具有1個ViewModel,並且不應在多個視圖中重用同一模型。

因此,在需要名稱時創建帶有DepartmentName的StudentXModel,在需要ID時創建帶有DepartmentId的StudentYModel。

在這里查看更多

使用ViewModel

public class StudentViewModel
{
    public int StudentId { get; set; }
    public String LastName { get; set; }
    public String FirstName { get; set; }
    public String UserName { get; set; }
    public String Password { get; set; }

    public int DepartmentID { get; set; }
    public String DepartmentName { get; set; }
}

將此ViewModel填充到控制器中,而不是返回Student ,而返回StudentViewModel 請記住在邏輯中填寫DepartmentName屬性(此時,您應該能夠使用DepartmentID獲得DepartmentName值)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM