0

私はMVC3とEFでブログの作成に取り組んでいます。私はすべてのモデルを作成しましたが、すべてがうまく機能しています。最新の投稿、コメント、およびすべてのカテゴリを含む適切なナビゲーションバーが必要だと判断しました。これはViewModelを使用するのに適した場所だと思いました。

記事、コメント、カテゴリをicollectionとして使用してViewModelを作成しました。コントローラーを作成し、LINQを実行してViewModelを埋め、部分的な共有ビューを作成しました。HTML.Partialなどを使用しようとすると、次のようになります。

ディクショナリに渡されるモデルアイテムのタイプはSystem.Collections.Generic.Listsですが、次のことを想定しています...

私がこれを使用しているページは、別のモデルに基づいた強く型付けされたページです。

私は何を間違っているのか、たぶん私は初心者の多くにいるのか、それとも間違った方法でやっているのか...助けて!?

編集:

発生したエラーは、部分ビューと呼んでいる行を強調しています

@ HTML.Partial( "_ SideBar")

SideBarはSideBarViewModelを使用しますが、呼び出し元の通常のページ( "Index.vbhtml")はArticleModelを使用します。この状況であなたの例がどのように機能するかはわかりません。これをたくさんのページで再利用したい...

SideBarViewModel:

Public Class SidebarViewModel
    Public Property RecentPosts As ICollection(Of Article)
    Public Property RecentComments As ICollection(Of Comment)
    Public Property Categories As ICollection(Of Category)
End Class

ArticleModel:パブリッククラスArticle Public Property ArticleId As Integer Public Property Author As String

    <DisplayFormat(DataFormatString:="{0:D}")>
    Public Property CreatedOn As DateTime

    <DisplayFormat(DataFormatString:="{0:D}")>
    Public Property LastModified As DateTime

    Public Property Content As String
    Public Property Title As String
    Public Property Excerpt As String
    Public Property Status As String
    Public Property IsPublic As Boolean

    Public Overridable Property Categories As ICollection(Of Category)
    Public Overridable Property Tags As ICollection(Of Tag)
    Public Overridable Property Comments As ICollection(Of Comment)
End Class
4

2 に答える 2

1

部分ビューを作成するときは、関連するモデルを渡す必要があります。

<% Html.renderpartial("partial", model.partialViewsModel); %>

したがって、ViewModelには、部分ビューに渡され、部分ビューが期待するタイプのモデルが含まれている必要があります。

したがって、view1のモデルは次のようになります。

public class View1()
{
  public PartialModel partielViewsModel { get;set;}
  public string title {get;set;}
}

そして、view2のモデルは次のようになります。

public class View2()
{
  public PartialModel partielViewsModel { get;set;}
  public int numberofthings {get;set;}
}
于 2012-08-16T05:26:54.303 に答える
0

この問題には、コントローラーの基本クラス、個別のビューモデル、およびカスタムフィルター属性を使用した優れた解決策があります。

http://blog.bitdiff.com/2012/05/sharing-common-view-model-data-in.html

于 2014-03-31T14:05:33.867 に答える