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>
型のモデル項目が必要です。
例に従いました。何が間違っているのかわかりません。ビューモデルを一般的なリストとして返す必要がありますか?
ビューでは、_@model IEnumerable<CookMe_MVC.ViewModels.CookMeIndexViewModel>
_を使用しています。これは、ビューが予期するモデルがCookMeIndexViewModelのIEnumerable型であることを示しています。
ただし、コントローラでは、CookMeIndexViewModel型のオブジェクトをモデルreturn View(viewModel);
として渡すため、エラーが発生します。
ビューを変更して_@model CookMe_MVC.ViewModels.CookMeIndexViewModel
_を持つようにする
または、次のようにCookMeIndexViewModelのIEnumerableをモデルとしてコントローラーのビューに渡します。
_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);
}
_
_Layout.cshtmlレイアウトビューの@modelディレクティブと「内部ページ」ビューの間に矛盾がある場合、このメッセージが表示されます。
_Layout.cshtmlにはディレクティブがありました。
@model MyProject.Models.MyObject
私の内側のページには...
@model IEnumerable<MyProject.Models.MyObject>
私はいくつかのテスト/実験コードに取り組んでいて、新しいコントローラなどを作成したときにこの問題にぶつかりました。問題の原因を見つけたのは、モデルオブジェクトの名前を変更してコンパイルしたときだけでした。
お役に立てれば。
Q.
剣道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; }
}
shared/EditorTemplateフォルダーのInteger.ascxで次を実行します。
<%@ 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)
%>