【发布时间】:2016-07-09 08:30:25
【问题描述】:
d对于 Umbraco 是如何做到这一点的非常困惑,如果可能的话,我正在寻找某种解释。我正在使用 Umbraco 7。我在 doc type 上有一个 custom property,这是一个 True/False(基本上是一个复选框)。
我在尝试解析 GetPropertyValue、object not reference to an object(即 True/False 复选框)时收到错误消息。
我在解析 1 INTO 对象时没有收到错误。
代码:
var topics = topicDocType.Select(x => new ForumModel
{
Topic = x.Name,
TopicId = x.Id,
/*no error*/ IsClosedForQuestions = x.GetPropertyValue("closedQuestions") == (object)1 ? true : false,
Questions = x.Descendants().Where(y => y.DocumentTypeAlias.Equals("Question")).Select(y => new Question
{
QuestionName = y.GetPropertyValue("question").ToString(),
QuestionId = y.Id,
QuestionDateTime = y.CreateDate,
AskedBy = y.GetPropertyValue("askedBy").ToString(),
/*no error*/ IsClosedForPosts = y.GetPropertyValue("closedPosts") == (object)1 ? true : false,
Posts = y.Descendants().Where(z => z.DocumentTypeAlias.Equals("Post")).Select(z => new Post
.... more code here
这不起作用,我不明白为什么:
var topics = topicDocType.Select(x => new ForumModel
{
Topic = x.Name,
TopicId = x.Id,
/*doesn't work*/ IsClosedForQuestions = int.Parse(x.GetPropertyValue("closedQuestions").ToString()) == 1 ? true : false,
.... more code here
这也不起作用:
var topics = topicDocType.Select(x => new ForumModel
{
Topic = x.Name,
TopicId = x.Id,
/*doesn't work*/ IsClosedForQuestions = x.GetPropertyValue("closedQuestions").ToString() == "1" ? true : false,
.... more code here
如果我创建一个测试变量
var test = new ContentService().GetById(2269).GetValue("closedQuestions");
test 的值为0,b/c 复选框未选中。如果我检查它,再次运行它,值为1。
这可能只是一个 C# 问题,也许我对此一无所知,也与 Umbraco 无关,但我知道我是否 .ToString() 一个对象并尝试检查该值是否等于另一个字符串,它可以工作。
欣赏它。
编辑:
阅读 Umbraco 将 true/false 保存为 int 的内容后。 True/False built-in-prop
True/False 是一个简单的复选框,它保存 0 或 1,具体取决于复选框是否被选中。
我还查找了如何从 object(int) 正确解析
Better way to cast object int
但是还是不行
IsClosedForQuestions = (int)x.GetPropertyValue("closedQuestions") == 1 ? true : false,
编辑 2:
这确实有效,可以检索正确的值。有什么原因的答案吗?
IsClosedForQuestions = x.GetPropertyValue<int>("closedQuestions") == 1 ? true : false,
为了告诉你它不为空:
改成int.Parse(....).ToString()) == 1后
【问题讨论】:
-
查看调试器时
x.GetPropertyValue("closedQuestions")会返回什么? -
1 或 0,取决于复选框是否被选中。这是一个对象(int)
-
如果您在该行收到
object not reference to an object错误,那么它不是 1 或 0 - 它是null -
当您尝试投射到
int时遇到什么错误? -
查看上面的图片。我也可以
ToString()其他属性。