如何为Umbraco中的下拉列表指定默认值?

如何为Umbraco中的下拉列表指定默认值?,umbraco,umbraco7,Umbraco,Umbraco7,我已经基于内置下拉列表创建了自定义数据类型,但无法确定如何为列表指定默认值。默认值始终为空: 默认下拉列表不支持默认值 有两种方法可以实现你想要的 创建您自己的下拉数据类型(或者使用其他人制作的插件-我不确定哪一个支持它,但可以看看) 因为它是您定制的,所以您可以控制它。有关如何创建一个结帐单的详细信息 使用web api处理程序拦截获取内容值的调用,如果属性为空(null),则为其设置默认值 下面是一些未经测试的代码: 首先创建web api处理程序 public class SetDro

我已经基于内置下拉列表创建了自定义数据类型,但无法确定如何为列表指定默认值。默认值始终为空:


默认下拉列表不支持默认值

有两种方法可以实现你想要的

  • 创建您自己的下拉数据类型(或者使用其他人制作的插件-我不确定哪一个支持它,但可以看看)

    • 因为它是您定制的,所以您可以控制它。有关如何创建一个结帐单的详细信息
  • 使用web api处理程序拦截获取内容值的调用,如果属性为空(null),则为其设置默认值

  • 下面是一些未经测试的代码:

    首先创建web api处理程序

    public class SetDropdownDefaultHandler : DelegatingHandler
    {
        protected override async Task<HttpResponseMessage> SendAsync
                (HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var response = await base.SendAsync(request, cancellationToken);
    
            var url = request?.RequestUri?.AbsolutePath.ToLower;
    
            // only process when a create (getempty) or editing a specific content (getbyid) 
            if (url == "/umbraco/backoffice/umbracoapi/content/getempty"
                || url == "/umbraco/backoffice/umbracoapi/content/getbyid")
            {
                var content = (ObjectContent)response.Content;
                var data = content?.Value as PagedResult<ContentItemBasic<ContentPropertyBasic, IContent>>;
    
                if (data?.Items != null)
                {
                    var tempResult = data?.Items?.ToList();
    
                    foreach (var item in tempResult)
                    {
                        foreach (var prop in item?.Properties?.Where(p => p?.Editor == "Umbraco.DropDown"))
                        {
                            var propStr = prop.Value?.ToString();
                            if (!propStr.IsNullOrWhiteSpace())
                            {
                                // set your default value if it is empty
                                prop.Value = "your default option prevalue id";
                            }
                        }
                    }
    
                    data.Items = tempResult;
                }
            }
    
            return response;
        }
    }
    

    您的问题可能是您不知道您的prevalueid-您可以在db中查找它,或者您可以使用datatype服务获取datatype prevalues,然后决定将哪个作为默认值放置

    查看:FieldType.DropDownList在fieldTypes文件夹中

    替换:

    与:

    var设置=Model.AdditionalSettings;
    @设置[“默认值”]

    然后确保在Umbraco Forms backoffice的下拉列表中为给定表单设置默认值属性

    public class UmbracoEvent : ApplicationEventHandler
    {
      protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
      {
        GlobalConfiguration.Configuration.MessageHandlers.Add(new SetDropdownDefaultHandler());
      }
    }