1

我在 Umbraco 上有一个模板,我设置了一个局部视图来检查是否为页面选择了英雄单位。我想检查这个 Partial 是否正在向页面发送任何内容,如果不是,我想渲染 1 个 div,如果选择了一个英雄单位,我想要 2 个 div。

我的代码目前是;

var heroUnit = @Html.Partial("HeroUnits",@Model.Content);
    @if(heroUnit != null)
    {
        <div class="span6">
            @Html.Raw(Model.Content.GetPropertyValue<string>("bodyText"))
        </div>
        <div class="span3">
            @Html.Partial("HeroUnits",@Model.Content);
        </div>      
    } else {
        <div class="span9">
            @Html.Raw(Model.Content.GetPropertyValue<string>("bodyText"))
        </div>
    }

这段代码似乎认为 HeroUnit 始终为空。

4

2 回答 2

0

另一种方法是使用jquery,你有一个包装器div,你将部分的内容放入其中,使用jquery在加载时检查div的内容是否为空,如果是则呈现其他2个div的else渲染一个。

于 2013-03-14T08:28:25.267 回答
0

我不相信以这种方式使用部分。因为您似乎正在尝试从函数中获取标量值,所以我认为辅助函数是您最好的选择,并且可以在整个应用程序中全局使用。

在 App_code 中添加一个文件:HeroHelper.cshtml

然后创建你的函数:

@using Umbraco
@using Umbraco.Core
@using Umbraco.Web.Models;
@using Umbraco.Core.Media;
@using Umbraco.Core.Models;
@using Umbraco.Web;
@using Umbraco.Web.umbraco;
@functions {

   public static bool HasHero(IPublishedContentNode node) 
   {
       // this contains your logic, I'll make somethingup
        return node.HasValue("HereUnit");       
   }
}

现在以下将起作用:var heroUnit = HeroHelper.HasHero(Model.Content);

您还可以为此创建一个 html 帮助程序,但这仅取决于您的用例。您将在部分中使用的这个辅助函数或一组函数也可以保持一致。

于 2013-08-30T14:07:53.567 回答