我正在为Orchard CMS开发自定义新闻模块。我的NewsItem
由以下几部分组成:TitlePart
,CommonPart
,BodyPart
和我的自定义NewsPart
。
当我尝试创建并保存项目时,BodyPart
变为空(其他部分保存正确),并且DB中有NULL
值。如果我在Text
表中更改Common_BodyPartRecord
列值,然后在编辑模式下打开项目,则编辑器为空,不会加载任何值。
以下是NewsItem
的{{1}}的定义:
migrations.cs
我试图调试 ContentDefinitionManager.AlterTypeDefinition("NewsItem", t => t
.WithPart("NewsPart")
.WithPart("CommonPart", p => p.WithSetting("DateEditorSettings.ShowDateEditor", "true"))
.WithPart("TitlePart")
.WithPart("BodyPart")
.Draftable()
);
类。当我在管理界面中加载新闻项目编辑器时,BodyPartDriver
方法输入了Editor()
参数。这是附加到BodyPart part
BodyPart
的实例。这里NewsItem
是空字符串。但是part.Text
正如我在DB表中直接设置的那样。
我无法理解这里有什么问题。其他部分如part.base.Record.Text = "Test"
或我的TitlePart
工作正常。我的模块中没有此NewsPart
的自定义代码。似乎我错过了什么,但到底是什么?
另外。 Orchard Error日志中有一个例外:
BodyPart
PS:我已将2014-10-22 17:25:15,307 [19] Orchard.ContentManagement.Drivers.Coordinators.ContentPartDriverCoordinator -
Default - HttpRequestValidationException thrown from IContentPartDriver by
Orchard.Core.Common.Drivers.BodyPartDriver
http://localhost:30321/OrchardLocal/Admin/News/Edit/56
System.Web.HttpRequestValidationException (0x80004005): A potentially dangerous
Request.Form value was detected from the client (Body.Text="<p>123123123</p>").
属性添加到我的[ValidateInput(false)]
类,默认为NewsAdminController
。现在Orchard.Core.Contents.Controllers.AdminController
正确保存。但在我看来,这不是正确的方式。
答案 0 :(得分:0)
永远不要直接修改数据库表或记录。改为浏览部件的属性。
这里发生的事情是这个属性既保存在记录中,也保存在信息集中。当您修改记录而不是信息集时,下次读取属性时,信息集值将获胜并且您的记录值将被覆盖。这是您不应该自己触摸记录的众多原因之一。