Элемент модели имеет тип CookMeIndexViewModel, но для него требуется элемент модели типа IEnumerable <CookMeIndexViewModel>
Я следую примеру музыкального магазина, чтобы попробовать изучить ASP.NET MVC. Я создаю приложение для поваренных книг.
Я создал свою модель просмотра, которая выглядит так:
namespace CookMe_MVC.ViewModels
{
public class CookMeIndexViewModel
{
public int NumberOfReceipes { get; set; }
public List<string> ReceipeName { get; set; }
}
}
мой контроллер выглядит следующим образом
public ActionResult Index()
{
var meals= new List<string> { "Dinner 1", "Dinner 2", "3rd not sure" };
//create the view model
var viewModel = new CookMeIndexViewModel
{
NumberOfReceipes = meals.Count(),
ReceipeName = meals
};
return View(viewModel);
}
Наконец, мой взгляд выглядит следующим образом
@model IEnumerable<CookMe_MVC.ViewModels.CookMeIndexViewModel>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th></th>
<th>
Meals
</th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
</td>
<td>
@item.ReceipeName
</td>
</tr>
}
</table>
Я получаю эту ошибку.
Элемент модели, переданный в словарь, имеет тип CookMeIndexViewModel
, но для этого словаря требуется элемент модели типа IEnumerable<CookMeIndexViewModel>
.
Я последовал примеру. Я не вижу, что я делаю неправильно. Должен ли я возвращать свою модель просмотра в качестве общего списка?
Ответы
Ответ 1
В вашем представлении вы используете @model IEnumerable<CookMe_MVC.ViewModels.CookMeIndexViewModel>
, который указывает, что модель, ожидаемая View, имеет тип IEnumerable из CookMeIndexViewModel.
Однако в контроллере вы передаете объект типа CookMeIndexViewModel в качестве модели return View(viewModel);
, следовательно, ошибку.
Либо измените представление, чтобы иметь @model CookMe_MVC.ViewModels.CookMeIndexViewModel
или передать IEnumerable из CookMeIndexViewModel в качестве модели для представления в контроллере, как показано ниже:
public ActionResult Index()
{
var meals= new List<string> { "Dinner 1", "Dinner 2", "3rd not sure" };
//create the view model
var viewModel = new CookMeIndexViewModel
{
NumberOfReceipes = meals.Count(),
ReceipeName = meals
};
List<CookMeIndexViewModel> viewModelList = new List<CookMeIndexViewModel>();
viewModelList.Add(viewModel);
return View(viewModelList);
}
Ответ 2
Я получил это сообщение, когда у меня возник конфликт между директивой @model в представлении макета _Layout.cshtml и представлением "внутренней страницы".
У параметра _Layout.cshtml была директива.
@model MyProject.Models.MyObject
Моя внутренняя страница имела...
@model IEnumerable<MyProject.Models.MyObject>
Я работал над некоторым кодом тестирования/эксперимента и ударил эту проблему, когда я создал новый контроллер и т.д. Только когда я переименовал Model Object и скомпилировал впоследствии, я нашел источник проблемы.
Надеюсь, что это поможет.
Вопрос.
Ответ 3
в кендо ui Сетка:
public class BookBean
{
[ScaffoldColumn(false)]
public Int32 Id { set; get; }
public String Title { set; get; }
public String Author { set; get; }
public String Publisher { set; get; }
[UIHint("Integer")]
public Int32 Price { set; get; }
[UIHint("Integer")]
public Int32 Instore { set; get; }
[UIHint("Integer")]
public Int32 GroupId { get; set; }
}
в Integer.ascx в папке Shared/EditorTemplate выполните:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<int?>" %>
<%: Html.Kendo().IntegerTextBoxFor(m => m)
.HtmlAttributes(new { style = "width:100%" })
.Min(int.MinValue)
.Max(int.MaxValue)
%>