#c# #asp.net-mvc #entity-framework #asp.net-mvc-5
#c# #asp.net-mvc #entity-framework #asp.net-mvc-5
Вопрос:
У меня есть контроллер, который возвращает список сообщений
public ActionResult MainMenu()
{
var myDataOp = new DataBaseOperations();
var Message=myDataOp.GetMessages();
return View(Message);
}
Вот функция, которая получает список
public List<ViewClass> GetMessages()
{
PrincelysDataContext pData = new PrincelysDataContext();
Princelys.Models.ViewClass myViewList =new ViewClass();
var myMessage =from r in pData.Messages select r;
DateTime presentTime = new DateTime();
foreach (var myValues in myMessage)
{
myViewList.myMessage.Add(new ViewClass
{
CreatedName ="ffff",// (from m in pData.Users where m.userid == myValues.createdBy select m.userName).Single(),
Messages = myValues.Message,
CreateOn = myValues.createddatetime.Subtract(presentTime)
});
}
return myViewList.myMessage;
}
Затем я использую свой список на странице просмотра.
@model Princelys.Models.ViewClass
....
@foreach (var messageValues in Model.myMessage)
{
<li class="left clearfix">
<span class="chat-img pull-left">
<img src="http://placehold.it/80/30a5ff/fff" alt="User Avatar" class="img-circle" />
</span>
<div class="chat-body clearfix">
<div class="header">
<strong class="primary-font">@messageValues.CreatedName</strong> <small class="text-muted">@messageValues.CreateOn.TotalHours mins ago</small>
</div>
<p>
@messageValues.Messages
</p>
</div>
</li>
}
Я получаю сообщение об ошибке при запуске страницы просмотра в браузере
Элемент модели, переданный в словарь, имеет тип ‘System.Коллекции.Generic.List`1[Princelys.Модели.ViewClass]’, но для этого словаря требуется элемент модели типа ‘Princelys.Модели.ViewClass’.
Это класс, который содержит свойства
public class ViewClass
{
public ViewClass()
{ myMessage = new List<ViewClass>(); }
public string CreatedName { get; set; }
public string Messages { get; set; }
public TimeSpan CreateOn { get; set; }
public List<ViewClass> myMessage;
}
Это мой первый проект MVC 5. Любая помощь будет с благодарностью принята.
Комментарии:
1. мое объявление для модели: @model Princelys . Модели. Класс представления
2. Сообщение не требует пояснений. Ваш переход
List<ViewClass>
к представлению, которое ожидает одноViewClass
. Измените один или другой, чтобы они соответствовали3. Вы не предоставили достаточно информации о том, что отображается в вашем представлении, но я подозреваю, что ваш метод должен быть
public ViewClass GetMessages()
таким, который содержитreturn myViewList;
(неreturn myViewList.myMessage;
)4. спасибо, ваше право изменить мой метод, как вы сказали, выполнило свою работу, сэкономило много времени. Спасибо, Стивен
Ответ №1:
Вы возвращаетесь List<ViewClass>
в действие вашего контроллера, однако похоже, что ваше представление строго типизировано ViewClass
. Измените его на @model IEnumerable<ViewClass>
Или наоборот, т.Е. Возврат ViewClas
из контроллера.
Основываясь на комментариях, проблема GetMessages
должна вернуться ViewClass
, поэтому она должна выглядеть следующим образом
public ViewClass GetMessages()
{
PrincelysDataContext pData = new PrincelysDataContext();
Princelys.Models.ViewClass myViewList =new ViewClass();
var myMessage =from r in pData.Messages select r;
DateTime presentTime = new DateTime();
foreach (var myValues in myMessage)
{
myViewList.myMessage.Add(new ViewClass
{
CreatedName ="ffff",// (from m in pData.Users where m.userid == myValues.createdBy select m.userName).Single(),
Messages = myValues.Message,
CreateOn = myValues.createddatetime.Subtract(presentTime)
});
}
return myViewList;
}
Комментарии:
1. Основываясь на коде OP, вероятно, наоборот — контроллер должен вернуть
ViewClass
🙂2. Смотрите Мои комментарии к вопросу и ответ OP. Предлагаю вам отредактировать это, чтобы его можно было принять
Ответ №2:
Вы передаете список в представление, но ваше представление строго типизировано для одного элемента этого списка. Попробуйте изменить это в своей модели:
@model List<ViewClass>