MVC - 部分视图

时间:2010-02-02 19:53:56

标签: asp.net-mvc

我有一个带有控制器Menucontroller的Viewpage菜单。我有一个partialView ViewItems,强类型为对象BagItem与控制器BagItem。 我试图从视图页面(Menu.aspx)渲染部分视图,并且无法渲染部分视图。任何帮助将不胜感激。新到MVC。这是代码

Menu.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<MenuItem>>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    OrderMenu
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        OrderMenu</h2>
    <div>
        <table>
            <tr>
                <td>
                    <% List<BagItem> sb = new List<BagItem>(); %>
                    <% Html.RenderPartial("../ShoppingBagItem/ViewItems", sb, (ViewDataDictionary)ViewData["BagItems"]);%>
                </td>
            </tr>
        </table>
    </div>

partialView

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<GuessCafe.Library.BagItem>>" %>
<body>
    <div id="divLatestStocks">
        <%foreach (var item in Model)
          { %>
        <ul>
            <li>
                <%= item.ShoppingBagItemId %>
            </li>
        </ul>

        <%}
        %>
    </div>
</body>

BagItemController

public ActionResult GetShoppingBagItems()
{
    ViewData["BagItems"] = ObjectContext.BagItem.ToList();
    return View(ViewData["BagItems"]);
}

2 个答案:

答案 0 :(得分:1)

我认为你想要的只是这个:

<% Html.RenderPartial("ViewItems", ViewData["BagItems"]); %>

这假设您的部分视图名为ViewItems.ascx。

您可以从视图中删除以下行:

<% List<BagItem> sb = new List<BagItem>(); %>

更新:您的部分视图不应包含<body>...</body>个标记。这些应该在母版页上。

答案 1 :(得分:0)

    public ActionResult GetShoppingBagItems()
{
    ViewData["BagItems"] = ObjectContext.BagItem.ToList();
    return View(ViewData["BagItems"]);
}

这是一种不好的做法。如果你想传递Model来查看为什么只使用ViewData Dictionary? 你可以简单地写一下:

        public ActionResult GetShoppingBagItems()
{
    var BagItems = ObjectContext.BagItem.ToList();
    return View(BagItems);
}