我有一个概念性的问题,所以stackoverflow没有答案。这是我必须要做的一项运动。练习是将人们注册到大学课程的简单形式。从一开始,我在SQL Server中有两个表,主题(有两列:id和description)和schedule(有三列:id,idSubject和description)。
练习要求我开发一个带有三个字段的视图的MVC webapp:名称,电话,电子邮件,并为每个主题显示带有可用时间表的单选按钮列表。
我想使用ViewModels以避免公开模型。但是,有些问题出现在我身上......
由于我将使用ViewModel,我可以从控制器发送以查看主题和日程表列表的独特方式是使用ViewBag,不是吗?还有更好的方法吗?
我想恢复执行此LINQ的主题和相关时间表列表:
using(var myDbContext = new subjectsEntities())
{
var scheduledSubjects = (from subject on myDbContext.Subjects
join schedules on myDbContext.Schedules
on subject.Id equals schedules.IdSubject
select new {
idSubject = subject.Id,
idSchedule = schedules.Id,
descSubject = subject.description,
descSchedule = schedules.description
})
.ToList();
}
但是在Models文件夹中我同时拥有Subject和Schedule类,其属性与表中的每个字段匹配(匹配名称和数据类型)。
我认为有一种更好的方法可以通过分组来直接返回一个主题列表,其中包含一个可以作为时间表列表的属性....¿我怎么能这样做?
非常感谢朋友!如你所见,我必须更好地理解一些概念,所以我非常感谢你的帮助。
感谢!!!
答案 0 :(得分:0)
只是扩展已经给出的更详细的回复:
简单的英语答案是您使用控制器中的linq数据实例化ViewModel,并通过在视图顶部声明@model ViewModelPath.MyViewModel将其显示为视图中定义的模型,然后返回字段使用类似@ Html.TextBoxFor(model => model.Description)......全都有例子。
我没有使用您的代码,因为它没有格式化,但ViewModel中的分组列表将如下所示:
... usings
...命名空间 {
public class MyViewModel
{
public int Id {get; set;}
public string Description {get; set;}
...
public IEnumerable<groupedList> GroupedList {get; set;}
}
public class GroupedList
{
public int GroupedId {get; set;}
public string GroupedDescr {get; set;}
...
}
}