【问题标题】:How to get CheckBoxList values in Umbraco using ContentService如何使用 ContentService 在 Umbraco 中获取 CheckBoxList 值
【发布时间】:2017-04-06 14:37:17
【问题描述】:

有人知道如何使用 ContentService 从 Umbraco 获取选定 CheckBoxList 值的列表吗?

我使用 contentService.GetValue("currencies")

我得到带有数字和逗号的字符串,例如“154,155,156,157”

如何获得实际值?

有人知道如何使用 DataTypeService 吗?

【问题讨论】:

  • 对不起,我使用 contentService.GetValue("currencies")

标签: checkbox umbraco umbraco7 checkboxlist umbraco6


【解决方案1】:

如上所述,您可以使用 Umbraco 辅助方法来检索 PreValue id 的字符串值。

Umbraco.GetPreValueAsString([PreValueId])

您可以在这里找到更多信息:https://our.umbraco.org/documentation/reference/querying/umbracohelper/#getprevalueasstring-int-prevalueid

它在后台直接通过DataTypeService调用数据库。值得重新考虑它并在另一种类型的属性/数据类型上关闭它,以避免在前端层调用数据库并仅从 IPublishedContent 缓存模型中检索数据。

还可以阅读 Umbraco 中的常见陷阱和反模式:https://our.umbraco.org/documentation/Reference/Common-Pitfalls/

【讨论】:

  • 您好,谢谢您的回复。还有一个问题:我不知道 Umbraco 有多好,但通常在 ASP.NET 应用程序中,您控制缓存并在某些内容发生更改时破坏它并重新缓存它。 Umbraco 会在意吗?如果 CMS/数据库发生变化,它会中断并重新缓存吗?第二件事,如果我发布从 RenderModel 继承的模型,我的内容会丢失一些数据,因此无法将其取回,因此我需要以某种方式从 Umbraco 获取它,而不是发布所有内容。最后一件事是我目前使用 ContentService 将其取回 - ContentService 是从数据库还是缓存中获取它?
  • ContentService 直接从数据库中获取数据。关于 IPublishedContent 缓存 - 是的,Umbraco 在后台执行每个相关操作后都会更新缓存。还有一些较低配置的选项,例如检查索引,如果您需要使用大量数据进行真正优化的东西,您可以阅读更多关于它们的信息。关于模型 - 检查 ModelsBuilder 内置的未来。它将为您提供强类型模型,您可以根据需要对其进行扩展。
【解决方案2】:

这些是预值。

从给定的字符串中,您必须通过调用 umbraco 库 umbraco.library.GetPreValueAsString(123); 之一来拆分它们并获得真正的价值

例如。

foreach(var item in contentService.GetValue("currencies").Split(',')) {
  var realValue = umbraco.library.GetPreValueAsString(int.Parse(item);
}

【讨论】:

  • 感谢您的回复似乎比以前更好,但我得到了 2 个空值。我查了一下,货币数量没问题,所以我得到了我需要的一切,但为什么我得到这 2 个空值?知道为什么吗?在我尝试使用 DataTypeService 做同样的事情之前还有一个问题,但它根本不起作用。是否可以使用 DataTypeService 做同样的事情?i.stack.imgur.com/dZhpP.png
  • 我看到您在网站前端的控制器方法中使用 contentservice。为此,最好使用 UmbracoHelper 类。 UmbracoHelper.TypedContent(model.PaymentFormId)
【解决方案3】:

您有 2 个空值,因为预值有时有空白值,例如“121,56,,15,145”。

然后您需要像这样修改拆分代码

foreach (var item in value.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{

}

StringSplitOptions.RemoveEmptyEntries 将忽略空格。

【讨论】:

  • 这并不能解释为什么会有空值。是否可以使用 DataTypeService 而不是 umbraco.library 做同样的事情?
  • 我不确定为什么它有空值,因为我还不知道 Umbraco 如何保存这些值,但检查它与您的数据类型值可能会有所帮助。同样使用 datatypeservice 直接调用 db 会减慢站点速度。
  • 好的,谢谢。那么你知道如何使用 datatypeservice 来做到这一点吗?你能提供一些样品吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多