局部视图和向布局传递数据的MVC3

3

我希望通过布局在所有页面中显示类别,以下是我的方法:

这是我的模型(NewsCategoriesModel):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;


namespace GiaoXuKeSat.Models
{
    public class NewsCategoriesModel
    {
        public int NewsCategoriesID { get; set; }
        public string NewsCategoriesName { get; set; }
    }
}

这里是PartialView (_NewsCategories)

@using System.Linq;


@using System.Linq;
@model IEnumerable<GiaoXuKeSat.Models.dms_NewsCategory>

@foreach (var item in Model) {
  <ul id="dmsMenuULUL">
     <li>@item.NewsCategoriesName</li>
</ul>     
}

我将该局部视图打印到布局中。

@Html.Partial("_NewsCategories");

但是我得到了“对象引用未设置为对象实例”的错误。 位于
@foreach (var item in Model) {
1个回答

7
您需要将您的部分视图所需的模型传递给它。例如:
@Html.Partial("_NewsCategories", Model.NewsItems);

如果你不使用模型,那么你只需将当前视图模型传递给你的局部视图。你也可以使用 ViewBag。

如果你从主/布局页面调用一个局部视图,那么你可能无法在每个页面上都有你的模型可用。因此,在这种情况下,最好创建一个控制器/操作,将你的新闻项目模型返回到一个局部视图中,然后使用...

@Html.Action("NewsCategories", "NewsController");

然后运行指定的操作,并显示该操作调用的部分视图。


我想将数据传递到布局中,如何设置ViewBag?这些数据是使用LINQ to SQL从数据库获取的吗? - Raito Light
这是一篇博客文章,应该会为您提供一些您正在寻找的信息。http://rachelappel.com/razor/partial-views-in-asp-net-mvc-3-w-the-razor-view-engine/ - Daniel Young
另外,如果您正在尝试将部分视图添加到主页面(也称为布局页面),您可能需要考虑使用@Html.Action。这将允许您调用控制器/操作,然后像任何其他操作一样运行,但是您将结果传递给部分视图。对于主/布局页面非常有效。 - Daniel Young
我相信你的意思是@Html.Partial("_NewCategories")吧?当前模型的副本会自动发送到这个局部视图中。 - Adam Tuliper
啊,没错,但是如果他的部分视图模型与当前模型不同,那么他就必须传递正确的模型。但我想说“模型”有点误导人了,我会更正帖子。 - Daniel Young

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接