我目前正在制作Adam Freeman和Steven Sanderson Apress的Pro Asp.net mvc3框架书,我在第20章(Jquery)遇到了一个问题。 这是本书的例子。 清单20-1。示例应用程序Index.cshtml查看
@using MvcApp.Models;
@model IEnumerable<Summit>
@{
ViewBag.Title = "List of Summits";
}
<h4>Summits</h4>
<table>
<thead>
</thead>
@foreach (Summit s in Model) {
<tr>
<td>@s.Name</td>
<td>@s.Height</td>
<td>
@using (Html.BeginForm("DeleteSummit", "Home")) {
@Html.Hidden("name", @s.Name)
<input type="submit" value="Delete" />
}
</td>
</tr>
}
</table>
@Html.ActionLink("Add", "AddSummit")
@using (Html.BeginForm("ResetSummits", "Home")) {
<input type="submit" value="Reset" />
}
此视图的视图模型是一系列Summit对象,其中顶级类有两个 属性:名称和高度。在控制器中,我们生成一些示例峰值并将它们传递给 查看,生成清单20-2中所示的HTML。
这是我的代码: 提交型号代码
public class Summit
{
public string Name { get; set; }
public int Height { get; set; }
}
SummitController
public ActionResult Index()
{
Summit[] summit = new Summit[10];
summit[0].Height = 1;
summit[0].Name = "himan";
return View();
}
Index.cshtml
@using MvcApp.Models;
@model IEnumerable<Summit>
@{
ViewBag.Title = "List of Summits";
}
<h4>Summits</h4>
<table>
<thead>
</thead>
@foreach (Summit s in Model) {
<tr>
<td>@s.Name</td>
<td>@s.Height</td>
<td>
@using (Html.BeginForm("DeleteSummit", "Home")) {
@Html.Hidden("name", @s.Name)
<input type="submit" value="Delete" />
}
</td>
</tr>
}
</table>
@Html.ActionLink("Add", "AddSummit")
@using (Html.BeginForm("ResetSummits", "Home")) {
<input type="submit" value="Reset" />
}
每当我运行此代码时。我总是将Object引用设置为不是对象的实例。我是mvc3的新手,所以我不太了解 这个问题来自何处。
答案 0 :(得分:6)
在SummitController中,您没有将值传递给View:
public ActionResult Index()
{
Summit[] summit = new Summit[10];
summit[0].Height = 1;
summit[0].Name = "himan";
return View(summit);
}
另外一定要给视图提供它想要的模型:它期待IEnumerable 不是 Summit的数组[]
进一步修改您的评论: 我会使用List&lt;&gt;像这样:
public ActionResult Index()
{
List<string> mylist = new List<string>();
mylist.Add("test2");
mylist.Add("test3");
mylist.Add("test4");
IEnumerable<string> myIEnumebrableList = mylist;
return View(myIEnumebrableList);
}
答案 1 :(得分:1)
MasterP,
IF 问题与传入的模型有关,请尝试以下操作:
public ActionResult Index()
{
Summit[] summit = new Summit[10];
for (int index = 0; index < summit.Length; index++)
{
summit[index] = new Summit();
}
summit[0].Height = 1;
summit[0].Name = "himan";
return View(summit.AsEnumerable());
}
这确保模型既传入又可显式枚举。另请注意以下行:summit[index] = new Summit();
。这是必需的,因为设置一个对象数组(summit)将它们全部初始化为空对象,而不是新的类成员。
我个人的感觉是,在现实生活中,你将峰会初始化为IList<Summit>