为什么模型未加载并在加载paritial视图时抛出System.NUllReferenceException

时间:2016-07-22 16:06:20

标签: html asp.net asp.net-mvc view model

从源App_Web_td5sjcre,NullReferenceException,"对象引用未设置为对象的实例。"发生。当我使用包含List的部分视图加载主页时会发生这种情况     

        @ Html.ActionLink("创建新","创建")

@model IEnumerable<ApplicationName.Models.Stuff>

</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Id)
        </th>
        <th></th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Id)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
            @Html.ActionLink("Details", "Details", new { id=item.Id }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.Id })
        </td>
    </tr>
}

</table>

我试图将div中的主页加载到div中作为局部视图。

这是用于调用主页中的局部视图的内容:

@Html.Partial("~\Views\Home\View.cshtml")

父视图:

@{
    ViewBag.Title = "Home Page";
}



<div class="row">
    <div class="col-md-4">
       Some stuff here.    
    </div>
    <div class="col-lg-8">
        Display list here:
        <div id="myPartialview">

            @*@Html.Partial("~/Views/Home/View.cshtml")*@
        </div>

    </div>
</div>

1 个答案:

答案 0 :(得分:1)

您的部分视图期望将Stuff对象的集合传递给它。我假设你在调用这个部分时没有传递非空值(一个有效的资料列表)。

所以不要这样做

@Html.partial("~View/Home/View.cshtml")

你应该这样做。

@Html.partial("~View/Home/View.cshtml",SomeVariableOfTypeStuffList)

因此,如果您的父模型被强类型化为具有List类型属性的视图模型,则可以将该属性传递给此部分。

public class HomeViewModel
{
   public List<ApplicationName.Models.Stuff> Stuffs { set;get;}
   public HomeViewModel()
   {
       this.Stuffs= new List<ApplicationName.Models.Stuff>();
   }
}

因此,在父视图(Home)的GET操作中,发送此

的对象
public ActionResult Home()
{
  var vm=new HomeViewModel();
  // to do : Load vm.Stuffs
  return View(vm);
}

现在在您的主页视图中,

@model HomeViewModel
<div class="col-lg-8">
        Display list here:
        <div id="myPartialview">
            @Html.Partial("~/Views/Home/View.cshtml",Model.Stuffs)
        </div>

</div>