局部视图渲染不在主页上渲染,抛出 HttpException

PartialView rendering not rendering on home page, throwing HttpExceptionn

我正在学习 MVC,并且正在尝试在主页上呈现分部视图。 我收到以下错误:

"HttpException"

我的非常简单的模型如下:

public class simpleModel
{
    public int id { get; set; }
    public string Name { get; set; }
}

控制器:

public ActionResult ShowNames()
{
    UsersContext db = new UsersContext();               
    return PartialView(db.SimpleModels.ToList());
}

局部视图:

@model List<MvcApplication1.Models.simpleModel>
@if (Model != null)
{
   <ul>
      @foreach (var item in Model)
      {
        <li>@item.Name</li>
      }
</ul>
}

我希望呈现局部视图的主页是

@{
    ViewBag.Title = "Home Page";
}
@section featured {
    <section class="featured">
        <p>To learn more about ASP.NET MVC visit </p>
    </section>
}
@{
    Html.RenderAction("ShowNames", "Simple");
}

您的 ShowNames() 方法 return 是视图的 simpleModel 项的集合(如 db.SimpleModels.ToList() 中所示)但是您的部分将模型声明为单个 simpleModel 对象。那会抛出异常,就像您尝试使用 foreach 循环迭代单个对象一样。

将部分视图模型声明更改为

@model List<MvcApplication1.Models.simpleModel>

但由于 <li>name</li> 只会 return 文本 "name"(或者假设它实际上是 <li>@name</li> 那么它会 return 文本 "MvcApplication1.Models.simpleModel"除非你覆盖了simpleModelToString()方法,所以你需要访问一个属性对象

<ul>
    @foreach (var item in model)
    {
        <li>@item.Name</li>
    }
</ul>

您的模型可能为空,即它没有任何数据。 因此,您应该在 foreachloop

之前进行检查

@model 列表

@if(model != null)
{
<ul>
    @foreach (var item in model)
    {
        <li>@item.Name</li>
   }
</ul>
}

尝试将 [ChildActionOnly] 属性添加到您的 ShowNames 方法。