1

私はViewModelBaseを持つMVC2プロジェクトを持っています。私が思った異なるビューモデルを継承した部分ビューが継承されています

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Curioos.Web.FrontOffice.Models.ViewModels.ViewModelBannerFront>" %> 

:この最後のPartialViewはViewModelBase継承ViewModelBannerFrontを必要と

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyProject.Web.FrontOffice.Models.ViewModels.ViewModelBase>" %> 
<% Html.RenderPartial("~/Views/Shared/Controls/BannerFront.ascx"); %> 

:このPartialViewもPartialViewを呼び出す

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<MyProject.Web.FrontOffice.Models.ViewModels.ViewModelBase>" %> 
<% Html.RenderPartial("~/Views/Shared/Controls/Header.ascx"); %> 

: 私は、マスターページによって呼び出さPartialViewを持っています継承と、問題はありません、私はコントローラでViewModelBannerFrontを設定します:

public ActionResult Index(string username) 
    { 
     //other stuff 
     ViewModelBannerFront vmbf = new ViewModelBannerFront(); 
     return View(vmbf); 
    } 

このアクションは、(partialviewなどのヘッダーを含む)masterpageに含まれるビューを呼び出します。

タイプエラーがあります。どうかお手伝いできますか? 最後のPartialViewでViewModelBannerFrontを渡すにはどうすればよいですか? は

答えて

2

パット、

よりもむしろ、れるrenderPartialを実行して以下を実行しようとすると、それが動作するはず事前にありがとう:

// assuming that your banner controller is called BannerFrontController 
<%Html.RenderAction("Index", "BannerFront"); %> 

<% Html.RenderPartial("~/Views/Shared/Controls/BannerFront.ascx"); %>が動作しないという理由は事実によるものですモデルが、パーシャルビューとして呼び出されたときに親ビューモデル(すなわち、MyProject.Web.FrontOffice.Models.ViewModels.ViewModelBase)から直接渡されること。これは、コントローラを介してコードを実行するのではなく、直接パーシャルを呼び出して、親ビューモデルによって読み込まれることを意味します。ビュータイプが(部分ビューで)ViewModelBannerFrontであることを考えると、ここに問題があります。

問題を攻撃する別の方法は、ViewModelBaseとViewModelBannerFrontの両方を含むように、あなたのviewmodelを構成することです。

// no need to call entire path as views are in shared folder 
<% Html.RenderPartial("Header", Model.ViewModelBase); %> 

<% Html.RenderPartial("BannerFront", Model.ViewModelBannerFront); %> 

などなどの部分図を呼び出すだけでいいです。

renderaction VSれるrenderPartialのための近い感触を得るために、このリンクを参照してください。あなたの答えのための

http://devlicio.us/blogs/derik_whittaker/archive/2008/11/24/renderpartial-vs-renderaction.aspx

+0

おかげで、私のバナーは、単純なビューのユーザーコントロールで、それは何のコントローラを持っていません。 BannerFront.ascx用に作成する必要があるということですか? – PatachouNewG

+0

pat、いいえ、しかし、あなたは突然タイプのミスマッチが発生しています。上記の内容に基づいて動作するために、ViewModelBaseとViewModelBannerFrontの両方を含む複合ビューモデルが必要です。 –

+0

継承は機能しません...すべてのページにBannerFrontを置く必要があります...私が避けたかったのは... – PatachouNewG

関連する問題