Ошибка MVC: требуется элемент модели типа 'System.Collections.Generic.IEnumerable`1 - PullRequest
4 голосов
/ 30 ноября 2010

Я делаю некоторые изменения в системе, и я столкнулся с исключением, с которым я надеялся, что кто-то может помочь ??Я получаю следующую ошибку:

Сведения об исключении: System.InvalidOperationException: переданный в словарь элемент модели имеет тип 'System.Collections.Generic.List 1[System.String]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [MyApp.Data.aspnet_Users] '.

По сути, я хочу отобразить список неактивных пользователей.Вот контроллер, который я написал для этого:

public ActionResult InactiveUsers()
        {
            using (ModelContainer ctn = new ModelContainer())
            {
                aspnet_Users users = new aspnet_Users();

                DateTime duration = DateTime.Now.AddDays(-3);

                var inactive = from usrs in ctn.aspnet_Users
                    where usrs.LastActivityDate <= duration
                    orderby usrs.LastActivityDate ascending
                    select usrs.UserName;

                return View(inactive.ToList());
            }

        }

Отсюда я добавил частичное представление.Вот код для этого, если кому-то интересно.Просто обычный Add View -> List.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<MyApp.Data.aspnet_Users>>" %>

    <table>
        <tr>
            <th></th>
            <th>
                ApplicationId
            </th>
            <th>
                UserId
            </th>
            <th>
                UserName
            </th>
            <th>
                LoweredUserName
            </th>
            <th>
                MobileAlias
            </th>
            <th>
                IsAnonymous
            </th>
            <th>
                LastActivityDate
            </th>
        </tr>

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

        <tr>
            <td>
                <%: Html.ActionLink("Edit", "Edit", new { id=item.UserId }) %> |
                <%: Html.ActionLink("Details", "Details", new { id=item.UserId })%> |
                <%: Html.ActionLink("Delete", "Delete", new { id=item.UserId })%>
            </td>
            <td>
                <%: item.ApplicationId %>
            </td>
            <td>
                <%: item.UserId %>
            </td>
            <td>
                <%: item.UserName %>
            </td>
            <td>
                <%: item.LoweredUserName %>
            </td>
            <td>
                <%: item.MobileAlias %>
            </td>
            <td>
                <%: item.IsAnonymous %>
            </td>
            <td>
                <%: String.Format("{0:g}", item.LastActivityDate) %>
            </td>
        </tr>

    <% } %>

    </table>

    <p>
        <%: Html.ActionLink("Create New", "Create") %>
    </p>

А для полноты здесь приведена страница указателя, на которой я отрисовываю партиал:

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

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Index
</asp:Content>

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

    <h2>Index</h2>

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

</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="Header" runat="server">
</asp:Content>

Если у кого-нибудь есть какой-либо совет, я был бы очень признателен

1 Ответ

3 голосов
/ 30 ноября 2010

Привет, я думаю, это потому, что в вашем частичном представлении тип System.Web.Mvc.ViewUserControl<IEnumerable<MyApp.Data.aspnet_Users>>, но вы выбираете имена пользователей

select usrs.UserName;

return View(inactive.ToList());

Попробуйте изменить его, чтобы выбрать usrs;но не usrs.UserName

...