【问题标题】:MVC - Partial ViewsMVC - 部分视图
【发布时间】:2010-02-02 19:53:55
【问题描述】:

我有一个带有控制器 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>

部分视图

<%@ 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"]);
}

【问题讨论】:

  • 发生了什么?部分视图只是没有被渲染吗?你看到错误了吗?

标签: asp.net-mvc


【解决方案1】:

我想你想要的只是这个:

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

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

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

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

更新:您的局部视图不应包含&lt;body&gt;...&lt;/body&gt; 标记。这些应该在母版页上。

【讨论】:

  • 感谢 TJB,是的,部分视图未呈现。谢谢马丁,如果我按照你说的做,我会收到错误传递到字典中的模型项的类型为'System.Collections.Generic.List1[MenuItem]' but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[Item]'
【解决方案2】:
    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);
}

【讨论】:

  • 感谢 ali62b,正如我所说,我是 mvc 新手,刚刚进入最佳实践
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多