C# 在SurfaceController中创建嵌套内容项
我有两种文档类型:C# 在SurfaceController中创建嵌套内容项,c#,umbraco,umbraco7,C#,Umbraco,Umbraco7,我有两种文档类型: 提交表格 福尔菲尔德 表单文档类型有一个名为字段的属性,该属性是一个数据类型,包含表单字段文档类型列表。我试图通过编程(在SurfaceController中)创建一个表单字段,并将其添加到表单文档类型的字段属性中 以下是我尝试使用的代码: var newFormFields = new List<Umbraco.Core.Models.IContent>(); int i = 0; foreach (var formField in model.Fields)
var newFormFields = new List<Umbraco.Core.Models.IContent>();
int i = 0;
foreach (var formField in model.Fields)
{
string fieldName = string.Format("Field {0}", i);
var newFormField = contentService.CreateContent(fieldName, newFormSubmission.Id, "formFieldSubmission", formNode.CreatorId);
newFormField.SetValue("fieldName", formField.Name);
newFormField.SetValue("fieldType", formField.Type);
newFormField.SetValue("manditory", formField.Manditory);
newFormField.SetValue("fieldValue", formField.Value);
newFormFields.Add(newFormField);
++i;
}
newFormSubmission.SetValue("fields", newFormFields);
var status = contentService.SaveAndPublishWithStatus(newFormSubmission, formNode.CreatorId, raiseEvents: false);
var newFormFields=newlist();
int i=0;
foreach(model.Fields中的var formField)
{
string fieldName=string.Format(“字段{0}”,i);
var newFormField=contentService.CreateContent(fieldName,newFormSubmission.Id,“formFieldSubmission”,formNode.CreatorId);
newFormField.SetValue(“fieldName”,formField.Name);
newFormField.SetValue(“fieldType”,formField.Type);
设置值(“manditory”,formField.manditory);
newFormField.SetValue(“fieldValue”,formField.Value);
newFormFields.Add(newFormField);
++一,;
}
SetValue(“字段”,newFormFields);
var status=contentService.SaveAndPublishWithStatus(newFormSubmission、formNode.CreatorId、raiseEvents:false);
在newFormSubmission.SetValue(“字段”,newFormFields)上代码>行它引发此异常:
与'Umbraco.Core.Models.ContentBase.SetPropertyValue(string,string)匹配的最佳重载方法具有一些无效参数
有人知道如何在数据类型中存储文档类型列表吗
PS:我使用的是Umbraco 7.4.0版组件:1.0.5885.31226
更新:
为我指明了在中开发自己的解决方案的正确方向。我希望有时间在这个项目后完善我的解决方案,并提交一个拉请求的项目
基本上,我创建了一些扩展方法,这些方法采用IEnumerable
并返回对象的JSON表示形式 似乎SetPropertyValue
方法的第二个参数需要一个string
并且您正在传递一个List
似乎SetPropertyValue
方法的第二个参数需要一个string
并且您正在传递一个List
这个要点可能会帮助您:
下面第二个文件中有一个示例。它是去年写的,可能需要一些调整;但是它应该给你一个好的开始。这个要点可能会帮助你:
下面第二个文件中有一个示例。它是去年写的,可能需要一些调整;但它应该给您一个良好的开端。有点过时,但您是否碰巧尝试重新创建Umbraco表单样式的功能?这里有一个开源的替代方案:@JannikAnker我希望它能这么简单。在这个项目中,我们有更具体的要求,不幸的是,Umbraco表单不支持这些要求。我希望他们这样做,但由于这一点,我们无法使用它…我希望我们可以。为了防止它可能有用,Formulate现在处于活动状态:有点过时,但您是否碰巧尝试重新创建Umbraco表单样式的功能?这里有一个开源的替代方案:@JannikAnker我希望它能这么简单。在这个项目中,我们有更具体的要求,不幸的是,Umbraco表单不支持这些要求。我希望他们这样做,但由于这一点,我们不能使用它…我希望我们可以。只是为了以防万一,它现在是活的:我同意这似乎是个问题;但是,当我查看SetValue方法的方法签名时,它是(string,object)。显然,该方法正在调用另一个具有签名(string,string)的方法。我的怀疑是,我需要将NestedContent数据序列化为JSON字符串,但我希望有人以前遇到过这一点,并有更好的提示。您可以查看Umbraco源代码(在Github上)以确认您的怀疑?我会尝试减少字段,看看哪些字段失败。目前只添加一个字段:newFormField.SetValue(“fieldName”,formField.Name)
我们需要知道哪个属性失败(Name?Type?Manditory?Value?)SetPropertyValue
函数调用SetValueOnProperty(propertyTypeAlias,Value)代码>函数。正如@JannikAnker所指出的,您可以在这里看到代码:我同意这似乎是问题所在;但是,当我查看SetValue方法的方法签名时,它是(string,object)。显然,该方法正在调用另一个具有签名(string,string)的方法。我的怀疑是,我需要将NestedContent数据序列化为JSON字符串,但我希望有人以前遇到过这一点,并有更好的提示。您可以查看Umbraco源代码(在Github上)以确认您的怀疑?我会尝试减少字段,看看哪些字段失败。目前只添加一个字段:newFormField.SetValue(“fieldName”,formField.Name)
我们需要知道哪个属性失败(Name?Type?Manditory?Value?)SetPropertyValue
函数调用SetValueOnProperty(propertyTypeAlias,Value)代码>函数。正如@JannikAnker所指出的,你可以在这里看到代码:这确实帮了我不少忙@robert foster。谢谢很高兴为您服务:)这确实帮了我不少忙@robert foster。谢谢很高兴为您服务:)