我正在尝试创建一个非常简单的轮询表单,我想使用剃刀而不是使用外部控件来尝试它。
我创建了一个表单,其中列出了一个问题和一个答案列表,当我们按提交时,我们转到调用处理结果的 razor 脚本的页面。
我想做的是遍历所有答案并将它们的计数器增加一个。每个 Answer 对象上都有一个名为"Counter"的数字属性。
然而,这一直失败。如果我这样做:
var objAnswer = @Model.NodeById(Int32.Parse(submittedAnswer));
objAnswer.getProperty("Counter").Value++;
或类似的方式,他们都失败了。奇怪的是objAnswer.getProperty("Counter")确实包含一个数字,但是当我尝试设置它时,我收到此错误:
umbraco.MacroEngines.DynamicNull' does not contain a definition for 'Value'
我得到我也尝试过
Document post = new Document(objAnswer.Id);
post.Publish(user);
但这也失败了。
有没有简单的方法来实现这一点?
答案是这样的!!
Document doc = new Document(objAnswer.Id);
doc.getProperty("counter").Value = 34;
umbraco.BusinessLogic.User author = umbraco.BusinessLogic.User.GetUser(0);
doc.Publish(author);
umbraco.library.UpdateDocumentCache(doc.Id);
并不是说属性需要小写。
Model.NodeById() 返回一个 DynamicNode 对象,其属性是只读的。你肯定要走文档路线,特别是因为Node和DynamicNode都从XML缓存中获取数据,而Document操作数据库。