在 umbraco8 中使用控制器的动作功能。

问题描述 投票:0回答:1

我正在用 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");
    }
}
c# .net model-view-controller umbraco
1个回答
0
投票

这个问题与 Umbraco 没有关系。[ChildActionOnly] 调用方法上缺少属性。

RenderAction(HtmlHelper, String, String)

调用指定的 子动法 使用指定的控制器名称,并在父视图中内联渲染结果。

https:/docs.microsoft.comen-usdotnetapisystem.web.mvc.html.childactionextensions.renderaction?view=aspnet-mvc-5.2。


0
投票

试试下面的方法。

删除控制器中的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需要传递到任何模型,所以我假设它不需要。

为了测试上面的工作,你可以在你的局部中加入一些简单的文本,看看它是否能在页面上呈现。

我不知道你的其他代码是什么样子的,所以不能确切地说你在这里试图实现的是否是最便捷的方式。

祝您好运

© www.soinside.com 2019 - 2024. All rights reserved.