在强类型视图中显示强类型部分

时间:2012-10-09 18:28:24

标签: c# asp.net-mvc partial-views

我是否可以在强类型视图中渲染强类型部分?

当我尝试:

时,我收到以下错误
  

传递到字典中的模型项是类型的   'System.Data.Linq.Table 1[UI.Models.vwProject]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [UI.Models.ProjectStatus]'。

我使用ViewData.Model填充两个视图

public ActionResult Index()
{
    ViewData.Model = project.vw_Projects;
    return View();
}

public ActionResult ProjectStatus()
{
    ViewData.Model = project.ProjectStatus;
    return View();
}

这是我的观点:

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

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <div>
    <table>
    <tr>
        <th>
            Project
        </th>
        <th>
            Hours
        </th>
    </tr>
    <tr>
        <td>
            <%= Html.Encode(item.ProjectCode) %>
        </td>
        <td>
            <%= Html.Encode(item.ProjectHours) %>
        </td>
    </tr>

<div>
 <%  Html.RenderPartial("ProjectStatus"); %>
</div>

</asp:Content>

这是我的部分内容:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<UI.Models.ProjectStatus>>" %>

    <table>
        <tr>
            <th>
                Code
            </th>
            <th>
                Status
            </th>
        </tr>

    <% foreach (var item in Model) { %>

        <tr>
            <td>
                <%= Html.Encode(item.ProjectCode) %>
            </td>
            <td>
                <%= Html.Encode(item.ProjectStatus) %>
            </td>
        </tr>

    <% } %>

    </table>

我对如何在强类型或动态视图中显示强类型/动态部分感到困惑。有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

是的,你可以。但是如果你没有将模型传递给RenderPartial,它将使用视图中的模型。 所以,你需要做那样的事情:

Html.RenderPartial("ProjectStatus", new List<ProjectStatus>()); %>

答案 1 :(得分:1)

如果你渲染一个部分,它就不会命中你的控制器动作,只是在默认情况下使用partent的视图模型渲染视图。

如果您想调用控制器操作ProjectStatus,那么您需要的是RenderAction方法:

<%  Html.RenderAction("ProjectStatus"); %>

关于When to use RenderAction vs RenderPartial with ASP.NET MVC

的好文章