Передача объекта для просмотра ошибки - PullRequest
1 голос
/ 31 августа 2011

Я получаю эту ошибку при попытке передать мой объект в представление.Я новичок в MVC, поэтому, пожалуйста, прости меня.Элемент модели, передаваемый в словарь, имеет тип 'System.Collections.Generic.List 1[<>f__AnonymousType1 3 [System.Int32, System.String, System.Nullable 1[System.DateTime]]]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable 1 [MvcApplication1.Models.storageProperty]'

Я пытаюсь передать список для таблицы, в которой будут показаны объекты из таблицы storageProperty с последней датой (если она есть) из таблицы расходов.В большинстве объектов была проведена хотя бы одна проверка расходов, в некоторых - много, а в других - нет.Вот код из контроллера:

var viewModel = db.storageProperties.Select(s => new
        {
            s.storagePropertyId,
            s.BuildName,
            latestExpenseSurvey = (DateTime?)s.expenses.Max(e => e.expenseDate)
        }).ToList();
        return View(viewModel); 

         }

и оператор @model в представлении вызывает объект storageproperty.Я использую MVC3 с рамкой сущности.Кажется очевидным, что я не могу передать этот объект списка вместо объекта storageproperty, но я не могу понять, что делать вместо этого, как мне это сделать?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Никогда не передавайте анонимные объекты в представления.Вы должны всегда передавать модели просмотра.

Таким образом, как всегда в приложении ASP.NET MVC, вы начинаете с определения модели представления, которая будет отражать требования вашего представления:

public class MyViewModel
{
    public int StoragePropertyId { get; set; }
    public string BuildName { get; set; }
    public DateTime? latestExpenseSurvey { get; set; }
}

Затем в вашем контроллере возвращает IEnumerable<MyViewModel>:

public ActionResult Index()
{
    var viewModel = db.storageProperties.Select(s => new MyViewModel
    {
        StoragePropertyId = s.storagePropertyId,
        BuildName = s.BuildName,
        LatestExpenseSurvey = (DateTime?)s.expenses.Max(e => e.expenseDate)
    }).ToList();
    return View(viewModel); 
}

и, наконец, строго введите свой вид в коллекцию этой модели:

@model IEnumerable<MyViewModel>
<div>
    @Html.EditorForModel()
</div>
0 голосов
/ 31 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...