0

我试图在 Umbraco 中将 page 作为参数传递。在助手中,我需要页面的一些属性。像名字,...

这是我的代码:

var PageWeAreInheritedFrom = CurrentPage;
    @ShowBanner(PageWeAreInheritedFrom);

@helper ShowBanner(dynamic pageWeRIn)
{
if (pageWeRIn.bannerIsInherited)
{
        @ShowBanner(pageWeRIn.Parent)
}
else
{
    //here I want to have a switch case based on pageWeRIn.Name 
    //but I cant have it. 
}
}

这是错误。似乎辅助方法中的页面类型不同

switch 表达式或 case 标签必须是 bool、char、string、integral、enum 或相应的可空类型

4

1 回答 1

0

这是因为pageWeRIn是动态的,而 C# 的开关不能与动态变量一起使用。我个人在我的观点中不使用动态,而只使用类型化模型。有关更多信息,请参阅:http: //24days.in/umbraco-cms/2015/strongly-typed-vs-dynamic-content-access/

类型化的实现看起来像这样(未经测试):

@ShowBanner(Mode.Content);

@helper ShowBanner(IPublishedContent pageWeRIn)
{
    if (pageWeRIn.GetPropertyValue<bool>("bannerIsInherited"))
    {
        @ShowBanner(pageWeRIn.Parent)
    }
    else
    {
        //use all the switches you want on pageWeRIn.Name
    }
}

在不更改整个代码的情况下执行此操作的另一种方法是引入一个键入的新变量(正如 Jannik 在他的评论中解释的那样),然后使用开关

string nodeName = pageWeRIn.Name
switch(nodeName){
    // whatever
}
于 2017-04-11T09:08:39.293 回答