答案 0 :(得分:3)
默认下拉列表不支持默认值
有两种方法可以达到你想要的效果
创建自己的下拉数据类型(或使用其他人制作的插件 - 我不确定哪一个支持它,但可能会看一下nuPickers)
使用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;
}
}
然后在已启动的事件中注册
public class UmbracoEvent : ApplicationEventHandler
{
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
GlobalConfiguration.Configuration.MessageHandlers.Add(new SetDropdownDefaultHandler());
}
}
你的问题也许你不知道你的prevalueid - 你可以在db中查找它,或者你可以使用数据类型服务来获取数据类型prevalues然后决定将其作为默认值
答案 1 :(得分:1)