1

ViewModelBase を使用した MVC2 プロジェクトがあります。masterPage によって呼び出される PartialView があります。

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

この PartialView も PartialView を呼び出します。

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

この最後の PartialView には、 ViewModelBase を継承する ViewModelBannerFront が必要です。

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

継承で問題ないと思ったので、コントローラにViewModelBannerFrontを設定しました:

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

このアクションは、マスターページに含まれるビュー (ヘッダーのパーシャルビューなどを含む) を呼び出します。

タイプエラーがあります。助けてもらえますか? 最後の PartialView で ViewModelBannerFront を渡すにはどうすればよいですか? 前もって感謝します

4

1 に答える 1

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、ここに問題があります。

この問題に対処するもう 1 つの方法は、ViewModelBase と ViewModelBannerFront の両方を含むようにビューモデルを作成することです。次に、次の行に沿って部分ビューを呼び出すだけです。

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

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

などなど。これが理にかなっていることを願っています。

次のリンクを参照して、renderpartial と renderaction の詳細を確認してください。

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

于 2011-02-07T12:28:55.660 に答える