共享局部视图

时间:2014-04-15 08:28:02

标签: asp.net-mvc model partial-views

什么是在主页上显示的最佳方式(HomeController,查看索引)来自其他模型的两条最新消息(新闻)?

我在共享视图目录中创建了部分视图,它的外观如下:

   @model IEnumerable<MyApp.Models.News>

     @foreach (var item in Model.Where(x => x.IsActive ==
     true).OrderByDescending(x => x.DateCreated).Take(2))  {
         <li>
             @Html.ActionLink(item.DateCreated.ToString(), "Details", "News", new { id = item.NewsId})
             <p>@item.Content</p>
         </li>
 }

但这样我就会收到错误:

 An exception of type 'System.ArgumentNullException' occurred in
 System.Core.dll but was not handled in user code

模型不为空,我的数据库中只有两个“活动”记录,此模型的索引文件也是正确的,但我不知道如何将此部分呈现给我的索引主页...(现在我在HomeController的@Html.Partial("_LatestNews")}

的Index.cshtml视图中

感谢您提前寻求帮助。

2 个答案:

答案 0 :(得分:0)

您需要将模型传递给部分,如此;

@ Html.Partial(&#34; _LatestNews&#34;,Model.News))

答案 1 :(得分:0)

你的部分视图期待你错过的IEnumerable,它应该有这样的东西。

@Html.Partial("_LatestNews", new IEnumerable<MyApp.Models.News>)

但是,在这种情况下,我宁愿关注。

布局视图页

    

最新消息

    
<script>
    $(function () {
        $("#content").html("Loading...");
        //Use setTimeout if you want to keep update or call LoadPartialView() directly.
        setTimeout(function () { LoadPartialView(); }, 5000);
    });
    function LoadPartialView() {
        $.ajax({
            type: "GET",
            url: '@Url.Action("GetNews", "Home")',
            dataType: "html",
            success: function (data) {
                $("#content").empty();
                $("#content").html(data);
                $("#content").fadeIn('slow');
            },
            error: function (data) {
                $("#content").empty();
            }
        });
    };
</script>

<强>控制器

    [HttpPost]
    public ActionResult GetNews()
    {
        List<MyApp.Models.News> model = db.GetNews();

        return PartialView("_LatestNews", model);
    }