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

拍,

与其运行渲染部分,不如尝试执行以下操作,它应该可以工作:

// 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。然后,只需按照以下方式调用局部视图:

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

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

等等等等。希望这是有道理的。

请参阅此链接以更深入地了解renderpartial vs renderaction:

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

于 2011-02-07T12:28:55.660 回答