Отображение строго типизированного партиала в строго типизированном представлении

Могу ли я не визуализировать строго типизированный партиал в строго типизированном представлении?

Я получаю следующую ошибку, когда пытаюсь:

Элемент модели, переданный в словарь, имеет тип System.Data.Linq.Table1[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>

Я немного смущен тем, как отображать строго типизированные / динамические частичные данные в строго типизированных или динамических представлениях. Может ли кто-нибудь помочь мне решить эту проблему?


person user793468    schedule 09.10.2012    source источник
comment
Разве вам не нужно передавать конкретный объект в RenderPartial? Если вы этого не сделаете, он получит модель из вызывающего представления.   -  person TLS    schedule 09.10.2012
comment
@TLS да, мне нужно передать конкретный объект в RenderPartial   -  person user793468    schedule 09.10.2012


Ответы (2)


Если вы визуализируете партиал, это не повлияет на вас. Действие контроллера просто визуализирует представление с использованием модели представления компонента по умолчанию.

Если вы хотите вызвать действие вашего контроллера ProjectStatus, тогда вам понадобится RenderAction:

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

Хорошая статья о Когда использовать RenderAction или RenderPartial с ASP.NET MVC

person nemesv    schedule 09.10.2012
comment
Когда уместно использовать динамические представления и партиалы? - person user793468; 10.10.2012
comment
@ user793468 трудно ответить на ваш вопрос в целом без данного контекста, возможно, вам следует задать другой вопрос ... Я лично никогда не использую динамические представления, только строго типизированные ... и мы используем частичные, когда представление может быть отображено с помощью модель под рукой, и не нужно запускать дополнительный код в контроллере. - person nemesv; 10.10.2012

Да, ты можешь. Но если вы не передадите модель в RenderPartial, он будет использовать модель из представления. Итак, вам нужно сделать что-то вроде этого:

Html.RenderPartial("ProjectStatus", new List<ProjectStatus>()); %>
person MuriloKunze    schedule 09.10.2012