簡単な質問...基本ページをレイアウトページに読み込むプロジェクトがあります。私の他のモデルのそれぞれで、私はこのBasePage
のモデルを参考にすることができます。しかし、別のモデルをリストするビューを作成すると、コンパイルエラーが発生します。ASP.NET MVC 5モデルのビューの問題
もっと明確に説明するために、私はユーザーのクラス登録の詳細を示すビューを呼び出します。このモデルはIEnumerable<Enrollment>
です。詳細ビューは登録ごとにうまく動作しますが、完全なリストを取得しようとすると、辞書タイプにBasePage
のモデルタイプが必要であることを示すコンパイルエラーが発生します。
これに関する明快さは素晴らしいでしょう!
申し訳ありませんこれは混乱している場合、私はかなり.NETの初心者です。
BasePageクラスモデル -
public abstract class BasePage
{
public BasePage()
{
public string prop { get; set; }
}
}
登録モデル -
public class Enrollment : BasePage
{
#region modelsettings
private static PageDisplayItem PAGE_DISPLAYITEM = new PageDisplayItem()
{
PageNavigationType = PageNavigationType.FullNavigation,
HasSideNavigation = true,
HasPageControl = true,
HasTableHeader = true,
HasPageHeader = true,
IsBackgroundDark = false,
IsContentTransparent = false
};
#endregion
public Enrollment()
{
this.SetPageDisplay(this, PAGE_DISPLAYITEM);
}
public Enrollment(bool isInitialize, string entityGUID = "")
{
// common props
var session = Helper.GetSession();
var planRepo = new PlanRepository();
var cmnRepo = new CommonRepository();
// set guid
if (!string.IsNullOrEmpty(entityGUID))
{
var entityRepo = new EntityRepository();
this.EntityItem = entityRepo.ReturnEntityOrUserItem(this.PageLanguageType, entityGUID);
if (this.EntityItem.EntityID == 0)
{
this.EntityItem = new EntityItem()
{
EntityGUID = session.SessionUserItem.UserGUID,
EntityName = session.SessionUserItem.UserFullName,
EntityID = session.SessionUserItem.UserID,
EntityType = EntityType.User
};
}
}
else
{
this.EntityItem = new EntityItem()
{
EntityGUID = session.SessionUserItem.UserGUID,
EntityName = session.SessionUserItem.UserFullName,
EntityID = session.SessionUserItem.UserID,
EntityType = EntityType.User
};
}
// init
if (isInitialize)
{
// page
this.SetPageDisplay(this, PAGE_DISPLAYITEM);
}
}
#region modelprops
// BasePage properties
public EntityItem EntityItem { get; set; }
public bool IsCurrentPeriod { get; set; }
public PeriodItem DisplayPeriod { get; set; }
public List<PeriodItem> PeriodList { get; set; }
// Enrollment properties
public string Id { get; set; }
#endregion
}
ここでは_Layout.cshtmlページです...私は簡潔のために勇気を切り取る:
@model BasePage
@{
var m = @Model;
}
<!DOCTYPE html>
<html>
<head>
<title>@m.PageTabTitle @m.PageTabTitleExtension</title>
ここでは、Userモデルの詳細を表示するために作成したUserモデルを示します。 UserモデルからBasePageクラスモデル:
public class User : BasePage
{
#region modelsettings
private static PageDisplayItem PAGE_DISPLAYITEM = new PageDisplayItem()
{
PageNavigationType = PageNavigationType.FullNavigation,
HasSideNavigation = true,
HasPageControl = true,
HasTableHeader = true,
HasPageHeader = true,
IsBackgroundDark = false,
IsContentTransparent = false
};
#endregion
public User()
{
this.SetPageDisplay(this, PAGE_DISPLAYITEM);
}
public User(bool isInitialize, string entityGUID = "")
{
// common props
var session = Helper.GetSession();
var planRepo = new PlanRepository();
var cmnRepo = new CommonRepository();
// set guid
if (!string.IsNullOrEmpty(entityGUID))
{
var entityRepo = new EntityRepository();
this.EntityItem = entityRepo.ReturnEntityOrUserItem(this.PageLanguageType, entityGUID);
if (this.EntityItem.EntityID == 0)
{
this.EntityItem = new EntityItem()
{
EntityGUID = session.SessionUserItem.UserGUID,
EntityName = session.SessionUserItem.UserFullName,
EntityID = session.SessionUserItem.UserID,
EntityType = EntityType.User
};
}
}
else
{
this.EntityItem = new EntityItem()
{
EntityGUID = session.SessionUserItem.UserGUID,
EntityName = session.SessionUserItem.UserFullName,
EntityID = session.SessionUserItem.UserID,
EntityType = EntityType.User
};
}
// init
if (isInitialize)
{
// page
this.SetPageDisplay(this, PAGE_DISPLAYITEM);
}
}
#region modelprops
// BasePage props
public EntityItem EntityItem { get; set; }
public bool IsCurrentPeriod { get; set; }
public PeriodItem DisplayPeriod { get; set; }
public List<PeriodItem> PeriodList { get; set; }
// User props
public string Id { get; set; }
#endregion
}
これは_Layout.cshtmlが使用されていると正常に動作し、ユーザーの詳細について.cshtmlページです:
@model FD.Models.User
@{
ViewBag.Title = "User Profile";
Layout = "~/Views/Shared/_BaseLayout.cshtml";
var m = Model;
}
そして最後に、ここのため.cshtmlがあります。
ここ@model IEnumerable<FD.Models.Enrollment>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table class="table">
// Again, I cut out the rest for the sake of brevity.
がある:私はIEnumerableをタイプを使用したとき、彼らは現在に在籍しているユーザーのクラスを示し登録リストにはいくつかの理由、それはコンパイル時に爆発しますブラウザでコンパイルエラーが発生します。
'/'アプリケーションでサーバーエラーが発生しました。辞書に渡さ
モデル項目タイプ 「System.Collections.Generic.List`1 [FD.Models.Enrollment]」であるが、これ 辞書はタイプ「FD.WWW.Modelsのモデル項目が必要.BasePage '。
説明現在のWeb要求の の実行中に、未処理の例外が発生しました。エラーについての詳細とコード内のどこで発生したのかについては、スタックトレースを参照してください。
例外の詳細:System.InvalidOperationExceptionが:辞書に渡さモデル項目 タイプの「System.Collections.Generic.List`1 [FD.Models.Enrollment]」であるが、この 辞書モデルアイテムを必要とタイプ 'FD.WWW.Models.BasePage'の。あなたの_layoutページはまた、他のページによって参照されていると仮定すると
あなたは、さらにあなたの問題を説明するために、任意のコードサンプルを提供することができますか? –
あなたは[mcve]のコードで例を示す必要があります。 – Nkosi