我正在用 umbraco8 创建一个新的网站,我有一个问题,如何从主页的视图中加载控制器中的一个动作。
主页查看
@inherits Umbraco.Web.Mvc.UmbracoViewPage<ContentModels.HomePage>
@using ContentModels = Umbraco.Web.PublishedModels;
@{
Layout = "webBase.cshtml";
}
@{ Html.RenderAction("RenderHomeSlider", "HomePage"); }
主页控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Umbraco.Web.Mvc;
using System.Web.Mvc;
using Umbraco.Core.Models;
using HAWELE.Models;
using Archetype.Models;
using Umbraco.Web;
using System.Threading;
using Umbraco.Web.Mvc.SurfaceController;
public class HomePageController : Umbraco.Web.Mvc.SurfaceController
{
public ActionResult Index(RenderModel model)
{
return base.Index(model);
}
private const string PARTIAL_VIEW_HOME_FOLDER = "~/Views/Partials/HomePage/";
public ActionResult RenderHomeSlider(this HtmlHelper html)
{
return PartialView(PARTIAL_VIEW_HOME_FOLDER + "_HomeSlider.cshtml");
}
}
这个问题与 Umbraco 没有关系。[ChildActionOnly]
调用方法上缺少属性。
RenderAction(HtmlHelper, String, String)
调用指定的 子动法 使用指定的控制器名称,并在父视图中内联渲染结果。
试试下面的方法。
删除控制器中的index方法。 在表面控制器中,它是不相关的。
将RenderHomeSlider Action修改为。
public ActionResult RenderHomeSlider()
{
return PartialView(PARTIAL_VIEW_HOME_FOLDER + "_HomeSlider.cshtml");
}
视图中的这一行
@{ Html.RenderAction("RenderHomeSlider", "HomePage"); }
应改为
@Html.Action("RenderHomeSlider", "HomePage")
这将使 _HomeSlider.cshtml
目前还不清楚您的 _HomeSlider.cshtml
partial需要传递到任何模型,所以我假设它不需要。
为了测试上面的工作,你可以在你的局部中加入一些简单的文本,看看它是否能在页面上呈现。
我不知道你的其他代码是什么样子的,所以不能确切地说你在这里试图实现的是否是最便捷的方式。
祝您好运