dVery запутывается в том, как Umbraco это сделал, и я ищу какое-то объяснение, если это возможно. Я использую Umbraco 7. У меня есть custom property
на doc type
, который является True/False
(в основном, флажок).Ошибка в анализе прав на интеллектуальную собственность Umbraco 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#, который, возможно, я ничего не знал, и ничего не нужно делать w/Umbraco, но я знаю, если я объект и попытаюсь проверить, равно ли это значение другой строке или нет, оно работает.
Цените его.
EDIT:
После прочтения, что Umbraco сохраняет истина/ложь как междунар.
True/False - это простой флажок, который сохраняет 0 или 1, в зависимости от того, установлен ли флажок.
Я также посмотрел, как правильно разобрать из object(int)
Better way to cast object int
Однако, это все еще не работает
IsClosedForQuestions = (int)x.GetPropertyValue("closedQuestions") == 1 ? true : false,
EDIT 2:
Это работа, с получением правильного значения. Какие-нибудь ответы на вопрос почему?
IsClosedForQuestions = x.GetPropertyValue<int>("closedQuestions") == 1 ? true : false,
Чтобы показать вам, что это не пустой:
После изменения в int.Parse(....).ToString()) == 1
Что делает 'x.GetPropertyValue (" closedQuestions ")' return, когда вы смотрите в отладчике? –
либо 1, либо 0, в зависимости от того, установлен ли флажок. Это объект (int) –
Если вы получаете ошибку 'object not reference to object' в этой строке, то это не 1 или 0 - это' null' –