【发布时间】:2015-02-12 10:36:06
【问题描述】:
我是 MVC 的新手,我正在尝试为某个 View 创建 ViewModel。我很困惑,无法在网上找到一个简单的解释,说明如何制作一个包含两个简单表格的视图——一个显示 Player.cs 中所有球员的列表,一个显示 Season.cs 中所有赛季的列表。我可以使用 EF 在单独的视图中执行此操作,但无法创建一个显示两个表的视图。感谢您帮助这个 MVC 新手,我希望这能帮助其他初学者。
这是我的三个模型。首先是 Player.cs
using System;
using System.Collections.Generic;
namespace TheFlyingPig.Models
{
public class Player
{
public int ID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<Stat> Stats { get; set; }
}
}
下一个模型是 Season.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
namespace TheFlyingPig.Models
{
public class Season
{
public int SeasonID { get; set; }
public string SeasonName { get; set; }
public virtual ICollection<Stat> Stats { get; set; }
}
}
第三个模型是 Stat.cs
namespace TheFlyingPig.Models
{
public class Stat
{
public int StatID { get; set; }
public int SeasonID { get; set; }
public int PlayerID { get; set; }
public int Hits { get; set; }
public virtual Season Season { get; set; }
public virtual Player Player { get; set; }
}
}
这是我正在尝试创建的 ViewModel:TeamStat.cs
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using TheFlyingPig.Models;
namespace TheFlyingPig.ViewModels
{
public class TeamStat
{
public List<Player> Players { get; set; }
public List<Season> Seasons { get; set; }
}
}
这是我的控制器:
using System.Data;
using System.Data.Entity;
using System.Net;
using TheFlyingPig.Models;
using TheFlyingPig.ViewModels;
namespace TheFlyingPig.Controllers
{
public class HomeController : Controller
{
private SoftballContext db = new SoftballContext();
public ActionResult Index()
{
return View();
}
public ActionResult TeamStat()
{
var players = db.Players().ToList();
var seasons = db.Seasons().ToList();
var view = new TeamStat(players, seasons);
return View(view);
}
}
}
这是我的观点:TeamStat.cshtml
@model TheFlyingPig.ViewModels.TeamStat
@{
ViewBag.Title = "Team Stats";
}
<h2>Team Stats</h2>
@foreach (var player in Model._players)
{
<table>
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>@player.FirstName</td>
<td>@player.LastName</td>
</tr>
</tbody>
</table>
}
<br /><br /><br />
@foreach (var season in Model._seasons)
{
<table>
<thead>
<tr>
<th>Season Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>@season.SeasonName</td>
</tr>
</tbody>
</table>
}
【问题讨论】:
-
您的视图模型需要包含 2 个属性 -
List<Player> Players和List<Season> Seasons您在控制器中填充然后传递给视图 -
我添加了控制器并查看页面。请让我知道我哪里出错了。通过尝试我在网上看到的各种方式,我不断收到构建错误。
-
您没有为属性分配任何东西(您的视图模型没有带有 2 个参数的构造函数)
var view = new TeamStat(){ Players = players, Seasons = seasons }; -
而且您的模型不包含属性名称
_players和_seasons@foreach (var player in Model.Players) {... -
随着构建成功,这似乎可以工作,但现在我的视图正在返回:编译器错误消息:CS1061:'TheFlyingPig.ViewModels.TeamStat'不包含'_players'的定义并且没有扩展可以找到接受“TheFlyingPig.ViewModels.TeamStat”类型的第一个参数的方法“_players”(您是否缺少 using 指令或程序集引用?)。在我的视图中调用它时我做错了吗?
标签: c# asp.net-mvc entity-framework visual-studio-2013 asp.net-mvc-5