Asp.net mvc 3 如何在视图MVC3 ASP.NET中查看多个表
我正在尝试使用MVC3 Razor中的LINQ从数据库中选择一个多表。为了查看视图中多个表中的多个数据,我需要对代码进行哪些更改Asp.net mvc 3 如何在视图MVC3 ASP.NET中查看多个表,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我正在尝试使用MVC3 Razor中的LINQ从数据库中选择一个多表。为了查看视图中多个表中的多个数据,我需要对代码进行哪些更改这是我的型号 public class DailyAttendance { [Key] public string pnp { get; set; } public string student_id { get; set; } public string mth_yr_id { get; set; } public string
这是我的型号
public class DailyAttendance
{
[Key]
public string pnp { get; set; }
public string student_id { get; set; }
public string mth_yr_id { get; set; }
public string D01 { get; set; }
public string D02 { get; set; }
} // and so on
public class TitasDb : DbContext
{
public DbSet<DailyAttendance> DailyAttendance { get; set; }
public DbSet<MonthYear> MonthYear { get; set; }
// and so on
}
这就是我试图查看数据的方式
@model IEnumerable<titas.Models.DailyAttendance>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.student_id)
<td>
</tr>
}
@model IEnumerable
@foreach(模型中的var项目){
@DisplayFor(modeleItem=>item.student\u id)
}
我得到的错误是
The model item passed into the dictionary is of type 'System.Data.Entity.Infrastructure.DbQuery`1[<>f__AnonymousType5`2[titas.Models.DailyAttendance,titas.Models.Student]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[titas.Models.DailyAttendance]'.
传递到字典中的模型项的类型为“System.Data.Entity.Infrastructure.DbQuery`1[f_uAnonymousType5`2[titas.Models.DailAttendence,titas.Models.Student]]”,但此字典需要类型为“System.Collections.Generic.IEnumerable`1[titas.Models.DailAttendence]”的模型项。
与在每个ASP.NET MVC应用程序中一样,定义一个视图模型,该模型将包含您需要在视图中使用的所有信息:
public class MyViewModel
{
public DailyAttendance DailyAttendance { get; set; }
public Student Student { get; set; }
}
public class AttendanceModel
{
public Student Student { get; set; }
public DailyAttendance DailyAttendace { get; set; }
}
然后让控制器操作将此视图模型返回到视图:
public class AttendanceController : Controller
{
TitasDb _attendanceModel = new TitasDb();
public ActionResult Index()
{
var model = from s in _attendanceModel.Student
join ssc in _attendanceModel.StudentSchoolClass on s.student_id equals ssc.student_id
join sc in _attendanceModel.SchoolClass on ssc.school_class_id equals sc.school_class_id
join da in _attendanceModel.DailyAttendance on s.student_id equals da.student_id
join my in _attendanceModel.MonthYear on da.mth_yr_id equals my.mth_yr_id
where my.month_id == "M05"
where sc.teacher_id == "T1000001"
select new MyViewModel
{
DailyAttendance = da,
Student = s
};
return View(model.ToList());
}
}
最后,将视图强类型化到视图模型:
@model IList<MyViewModel>
<table>
<thead>
<tr>
<th>student id</th>
<th>attendance id</th>
</tr>
</thead>
<tbody>
@for (var i = 0; i < Model.Count; i++)
{
<tr>
<td>@Html.DisplayFor(x => x[i].Student.student_id)</td>
<td>@Html.DisplayFor(x => x[i].DailyAttendance.attendance_id)</td>
</tr>
}
</tbody>
</table>
现在,您的主要视图变成:
@model IList<MyViewModel>
<table>
<thead>
<tr>
<th>student id</th>
<th>attendance id</th>
</tr>
</thead>
<tbody>
@Html.DisplayForModel()
</tbody>
</table>
@model-IList
学生证
考勤id
@Html.DisplayForModel()
与在每个ASP.NET MVC应用程序中一样,定义一个视图模型,该模型将包含您需要在视图中使用的所有信息:
public class MyViewModel
{
public DailyAttendance DailyAttendance { get; set; }
public Student Student { get; set; }
}
public class AttendanceModel
{
public Student Student { get; set; }
public DailyAttendance DailyAttendace { get; set; }
}
然后让控制器操作将此视图模型返回到视图:
public class AttendanceController : Controller
{
TitasDb _attendanceModel = new TitasDb();
public ActionResult Index()
{
var model = from s in _attendanceModel.Student
join ssc in _attendanceModel.StudentSchoolClass on s.student_id equals ssc.student_id
join sc in _attendanceModel.SchoolClass on ssc.school_class_id equals sc.school_class_id
join da in _attendanceModel.DailyAttendance on s.student_id equals da.student_id
join my in _attendanceModel.MonthYear on da.mth_yr_id equals my.mth_yr_id
where my.month_id == "M05"
where sc.teacher_id == "T1000001"
select new MyViewModel
{
DailyAttendance = da,
Student = s
};
return View(model.ToList());
}
}
最后,将视图强类型化到视图模型:
@model IList<MyViewModel>
<table>
<thead>
<tr>
<th>student id</th>
<th>attendance id</th>
</tr>
</thead>
<tbody>
@for (var i = 0; i < Model.Count; i++)
{
<tr>
<td>@Html.DisplayFor(x => x[i].Student.student_id)</td>
<td>@Html.DisplayFor(x => x[i].DailyAttendance.attendance_id)</td>
</tr>
}
</tbody>
</table>
现在,您的主要视图变成:
@model IList<MyViewModel>
<table>
<thead>
<tr>
<th>student id</th>
<th>attendance id</th>
</tr>
</thead>
<tbody>
@Html.DisplayForModel()
</tbody>
</table>
@model-IList
学生证
考勤id
@Html.DisplayForModel()
您正在向视图发送匿名对象,并声明您的视图获得IEnumerable
,但在这种情况下,这是不正确的。试着为它做个模型
public class MyModel
{
public DailyAttendance dailyAttendance{ get; set; }
public Student student { get; set; }
}
然后在控制器中,将数据填充到此模型中
var model = (from s in _attendanceModel.Student
join ssc in _attendanceModel.StudentSchoolClass on s.student_id equals ssc.student_id
join sc in _attendanceModel.SchoolClass on ssc.school_class_id equals sc.school_class_id
join da in _attendanceModel.DailyAttendance on s.student_id equals da.student_id
join my in _attendanceModel.MonthYear on da.mth_yr_id equals my.mth_yr_id
where my.month_id == "M05"
where sc.teacher_id == "T1000001"
select new MyModel { dailyAttendance = da, student = s }).ToList();
然后将其传递给视图,并像下面这样声明视图的模型
@model IEnumarable<MyModel>
@model IEnumarable
您正在向视图发送匿名对象,并声明您的视图获得IEnumerable
,但在这种情况下,这是不正确的。试着为它做个模型
public class MyModel
{
public DailyAttendance dailyAttendance{ get; set; }
public Student student { get; set; }
}
然后在控制器中,将数据填充到此模型中
var model = (from s in _attendanceModel.Student
join ssc in _attendanceModel.StudentSchoolClass on s.student_id equals ssc.student_id
join sc in _attendanceModel.SchoolClass on ssc.school_class_id equals sc.school_class_id
join da in _attendanceModel.DailyAttendance on s.student_id equals da.student_id
join my in _attendanceModel.MonthYear on da.mth_yr_id equals my.mth_yr_id
where my.month_id == "M05"
where sc.teacher_id == "T1000001"
select new MyModel { dailyAttendance = da, student = s }).ToList();
然后将其传递给视图,并像下面这样声明视图的模型
@model IEnumarable<MyModel>
@model IEnumarable
问题是您正在传递一个匿名类型作为模型:选择新的{dailyattendace=da,Student=s}
在视图中将模型定义为@model IEnumerable
尝试创建特定于视图的模型:
public class MyViewModel
{
public DailyAttendance DailyAttendance { get; set; }
public Student Student { get; set; }
}
public class AttendanceModel
{
public Student Student { get; set; }
public DailyAttendance DailyAttendace { get; set; }
}
或者任何对你有用的东西。您可能还需要为学生和日常学员创建特定的视图模型
然后您可以更改您的模型:
@model IEnumerable
并选择:
选择新的考勤模式{DailyAttendance=da,Student=s}
希望这能让您走上正确的轨道。问题是您正在传递一个匿名类型作为模型:
选择新的{dailyattence=da,Student=s}
,您在视图中将模型定义为@model IEnumerable
尝试创建特定于视图的模型:
public class MyViewModel
{
public DailyAttendance DailyAttendance { get; set; }
public Student Student { get; set; }
}
public class AttendanceModel
{
public Student Student { get; set; }
public DailyAttendance DailyAttendace { get; set; }
}
或者任何对你有用的东西。您可能还需要为学生和日常学员创建特定的视图模型
然后您可以更改您的模型:
@model IEnumerable
并选择:
选择新的考勤模式{DailyAttendance=da,Student=s}
希望这能让你走上正轨