0

我不能在强类型视图中呈现强类型部分吗?

我在尝试时收到以下错误:

传入字典的模型项的类型为“System.Data.Linq.Table 1[UI.Models.vwProject]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[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>

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

4

2 回答 2

2

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

Html.RenderPartial("ProjectStatus", new List<ProjectStatus>()); %>
于 2012-10-09T18:34:11.677 回答
1

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

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

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

一篇关于何时将 RenderAction 与 RenderPartial 与 ASP.NET MVC 一起使用的好文章

于 2012-10-09T18:34:00.080 回答