为什么我得到的是"对象引用未设置为对象的实例".例

Mas*_*erP 0 c# asp.net asp.net-mvc-3

我目前正在制作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" />
}
Run Code Online (Sandbox Code Playgroud)

此视图的视图模型是一系列Summit对象,其中summit类具有两个属性:Name和Height.在控制器中,我们生成一些示例峰值并将它们传递给视图,生成清单20-2中所示的HTML.

这是我的代码:提交模型代码

public class Summit

    {
    public string Name { get; set; }
    public int Height { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

SummitController

public ActionResult Index()
{
    Summit[] summit = new Summit[10];
    summit[0].Height = 1;
    summit[0].Name = "himan";
    return View();
}
Run Code Online (Sandbox Code Playgroud)

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" />
}
Run Code Online (Sandbox Code Playgroud)

每当我运行此代码.我总是将Object引用设置为不是对象的实例.我是mvc3的新手,所以我不太了解这个问题的来源.

Ale*_*eta 6

在SummitController中,您没有将值传递给View:

public ActionResult Index()
{
    Summit[] summit = new Summit[10];
    summit[0].Height = 1;
    summit[0].Name = "himan";
    return View(summit);
}
Run Code Online (Sandbox Code Playgroud)

另外一定要给它看看它想要的模型:它期待IEnumerable 而不是Summit的数组[]

关于你的评论的进一步编辑:我会使用像这样的List <>:

 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);
    }
Run Code Online (Sandbox Code Playgroud)