为什么我得到了“我是”;对象引用未设置为对象的实例";实例

本文关键字:实例 对象 设置 quot 对象引用 我是 为什么 | 更新日期: 2023-09-27 18:26:00

我目前正在编写Adam Freeman和Steven Sanderson Apress的Pro Asp.net mvc3 Framework一书,我在ch.20(Jquery)中遇到了一个问题。这是书中的例子。清单20-1。示例应用程序索引.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对象的序列,其中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();
}

索引.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" />
}

每当我运行此代码时。我总是得到对象引用,而不是设置为对象的实例。我是mvc3的新手,所以我不太了解这个问题是从哪里来的。

为什么我得到了“我是”;对象引用未设置为对象的实例";实例

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

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

还要确保为视图提供它想要的模型:它期望的IEnumerablenotSummit阵列[]

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

 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);
    }

MasterP,

如果问题与传入的模型有关,请尝试以下操作:

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)会将它们全部初始化为null对象,而不是新的类成员。

我个人的感觉是,在现实生活中,您会将Summit初始化为IList<Summit>