我刚刚完成了2个视图,一个插入和一个索引视图,我不得不说,处理多个表并不容易。 “插入”是最简单的,我只需添加到2个不同的表:
[HttpPost]
public ActionResult Index(CustPlayerVM custPlayer)
{
var Cust = new Cust()
{
CustID = custPlayer.CustID,
Color = custPlayer.Color
};
var Player = new Player()
{
PlayerName = custPlayer.PlayerName
};
db.Custs.Add(Cust);
db.Players.Add(Player);
db.SaveChanges();
return View();
}
问题是我在List<>中遇到了各种错误和IEnumberable<>试图编写视图代码。您可以在处理“foreach”循环时获得可怕的“传递到字典中的模型项是类型”错误或视图中的空引用。这是一个奇迹,这是有效的,但我不能告诉你为什么。这就是我开始提出这个问题的原因。 以下是“视图”的样子:
public ActionResult List()
{
ViewBag.Message = "custPlayer";
//CustPlayerVM vm = new CustPlayerVM();
List<object> vm = new List<object>();
vm.Add(db.Custs.ToList());
vm.Add(db.Players.ToList());
ViewBag.PlayerCnt = db.Players.Count();
return View(vm);
}
注意List(与注释掉的viewmodel相对)。 这就是视图:
@model IEnumerable<object> @{
List<viewModelA.Cust> lstCust = Model.ToList()[0] as List<viewModelA.Cust>;
List<viewModelA.Player> lstPlayer = Model.ToList()[1] as List<viewModelA.Player>; }
@Html.ActionLink("Create New", "Create") </p> <table class="table">
<tr>
<th>
@Html.Raw("Color")
</th>
<th>
@Html.Raw("CustID")
</th>
<th>
@Html.Raw("ID")
</th>
<th>
@Html.Raw("Player Name")
</th>
<th>
@Html.Raw("PlayerID")
</th>
</tr>
@for (int i = 0; i < ViewBag.PlayerCnt; i++)
{
<tr>
<td>@lstCust[i].Color</td>
<td> @lstCust[i].CustID</td>
<td> @lstCust[i].ID </td>
<td> @lstPlayer[i].PlayerName </td>
<td> @lstPlayer[i].ID</td>
</tr>
} </table>
我必须在代码周围换一个for循环,因为foreach分别为每个表运行。
将来,你应该怎么处理IEnumerable和匿名类型? 这不应该是这么难,对吗?
答案 0 :(得分:0)
为了改进您的代码,我强烈建议您在OOP basics和.NET基础知识中进行更多调查,包括如何使用集合(Array
,List
,Collection
,{ {1}},IEnumberable
)。
然后,以下想法将是显而易见的:
创建一个通用的ViewModel类,它将代表View的状态
foreach
将此公共类用于视图
class PersonViewModel{
public int CustID {get;set;}
public string Color {get;set;}
public string PlayerName {get;set;}
}
应用PersonViewModel类型
的集合,而不是通用对象类型列表public ActionResult List()
{
var viewModel = new List<PersonViewModel>();
viewModel.Add(db.Custs.ToArray());
viewModel.Add(db.Players.ToArray());
return View(viewModel);
}