如何在asp.net mvc4局部视图中呈现新闻源

时间:2013-03-26 15:50:48

标签: c# asp.net-mvc razor asp.net-mvc-partialview

我有一个新的MVC4项目。

在我的_Layout.cshtml中,我有以下内容:

<div class="container maincontent">
        <div class="row">
            <div class="span2 hidden-phone">
                @*
            In here is a RenderSection featured. This is declared in a section tag in Views\Home\Index.cshtml. 
            If this is static text for the whole site, don't render a section, just add it in.
            You should also be able to use  @Html.Partial("_LoginPartial") for example. 
            This _LoginPartial will need to be a cshtml in the Shared Views folder. 
            *@

                @{ Html.RenderPartial("_NewsFeed"); }
            </div>
            <div class="span10">
                @RenderBody()
            </div>
        </div>
    </div>

我的部分观点是

<div class="row newsfeed">
NEWS FEED
@foreach (var item in ViewData["newsfeed"] as IEnumerable<NewsItem>)
{
    <div class="span2 newsfeeditem">
        <h3>@item.NewsTitle</h3>
        <p>@item.NewsContent</p>
        @Html.ActionLink("More", "NewsItem", "News", new {id=@item.Id}, null)
    </div>    
}    

有没有办法让局部视图进行数据调用。目前,我必须在我的控制器中为每个操作执行以下操作:

ViewData["newsfeed"] = _db.NewsItems.OrderByDescending(u => u.DateAdded).Where(u => u.IsLive == true).Take(4);
        return View(ViewData);

我已经不知道我已经将模型传递到视图中,因为我无法将其传递到视图中。

我知道我做错了什么,只是不确定是什么或在哪里。

我只是希望能够在我的_layout中进行渲染调用,然后部分视图知道收集数据然后渲染自己。或者我得到了错误的结束?我想我试图像ascx一样使用它......

1 个答案:

答案 0 :(得分:2)

您应该从使用RenderPartial切换到RenderAction。这允许您再次通过管道并生成一个ActionResult,就像部分一样,但是带有服务器端代码。例如:

@Html.RenderAction("Index", "NewsFeed");

然后您制作NewsFeedController并提供Index操作方法:

public class NewsFeedController : Controller
{
     public ActionResult Index()
     {
          var modelData = _db.NewsItems.OrderByDescending(...);
          // Hook up or initialize _db here however you normally are doing it

          return PartialView(modelData);
     }
}

然后,您只需将您的CSHTML视为Views / NewsFeed / Index.cshtml位置中的普通视图。