我是asp.net的新手,有一些关于堆栈溢出的问题,但它们不符合我的目的。我的问题是......
我如何实现以下两个模型的视图模型?
public class model1
{
int student-id{ get;set}
string student-name{get; set;}
}
public class model2
{
int course-code{get; set;}
string course-name{get; set;}
}
现在我想编写一个可以传递给视图的视图模型,该视图显示学生姓名和相应的课程名称。
注意:学生可以注册多门课程。
答案 0 :(得分:0)
public class StudentViewModel
{
public string Name{get;set;}
public int StudentId{ get;set}
public List<model2> Courses
}
如果目标是向学生显示课程信息,您可以考虑将这两个模型组合到上面的视图模型中。
答案 1 :(得分:0)
首先,您应修改模型。学生和课程必须相关。您可以实现以下关系:
public class Student
{
public int Id { get; set }
public string Name { get; set; }
public ICollection<Course> Courses { get; set; }
}
public class Course
{
public int Code { get; set; }
public string Name{ get; set; }
public ICollection<Student> Students { get; set; }
}
之后 - 您创建视图模型。视图模型类必须仅包含您在视图中实际需要的内容。在你的情况下 - 学生和课程名称。你可以在这里考虑几个选项。如果您只想在一行中显示所有课程名称,您可以构建 StudentViewModel ,如下所示:
public class StudentViewModel
{
public string Name { get; set; }
// In this case you can just join all courses' names to one string using string.Join(", ")
public string Courses { get; set; }
}
...或者像这样 - 如果你想要将课程名称分开(在某些select或list html元素中使用它们)。但是您可以创建JoinedCources
属性,该属性将返回连接成一个字符串的课程名称。
public class StudentViewModel
{
public string Name { get; set; }
public ICollection<string> Courses { get; set; }
public string JoinedCources {
get {
return string.Join(", ", Courses);
}
}
}
注意:这只是一个学生的视图模型!如果要显示显示学生及其课程列表的视图,您应该创建具有属性StudentViewModel
的新视图模型,或者在视图中定义模型,如@model ICollection<StudentViewModel>
而不是{{ 1}}。
现在您必须将模型映射到视图模型。例如,当您从数据库(或任何其他数据源 - 文件或Web服务)获取学生时,在您的控制器操作中:
@model StudentViewModel
现在关于映射的话很少。 public ActionResult StudentDetails(int studentId)
{
var student = _dataSource.GetStudent(studentId);
var model = AutoMapper.Mapper.Map<StudentViewModel>(student);
return View(model);
}
是外部类库,如果您希望将来使用视图模型和映射,您一定要了解它。它将帮助您简化操作方法代码并使其更具可读性。但是因为你是ASP的新手。你可以通过网络首次实现自己的映射。例如,如下所示:
AutoMapper