在我的主页上,我想要一个简单的 Web 部件,允许用户快速填写列表中的条目。
比如说,该列表有三个字段:标题(文本)、正文(富文本)、类别(查找)。
我不想使用标准的 DataFormWebPart,因为我有一些代码隐藏也填充了我列表的一些技术隐藏字段(实际上,我不排除 DataFormWebPart,但我没有找到如何使用它后面有代码)。
所以我开始实现一个自定义的 webpart。因为我不想手动处理每个字段输入,所以我开始使用FormField
控件,它会自动选择渲染控件,并提供Value
具有正确格式的属性:
<SharePoint:FormField runat="server" id="fldTitle" FieldName="Title" />
这段代码是不够的,我必须指定 listid :
<SharePoint:FormField runat="server" id="fldTitle" FieldName="Title" ListId="{title list guid}" />
这工作得非常正确。我可以在代码中访问fldTitle.Value
以检索用户输入。
但是我必须将 webpart 包含在可以激活的正确打包和部署的功能中。webpart 将始终以相同的列表为目标,但由于该列表也在功能(ListInstance 元素)中实例化,因此我无法提前知道 Guid。
我尝试过使用几种技术来动态设置列表 ID,但没有成功。
我还“反映”了 SP dll,以注意到 FormComponent 类正在使用由 ListFormWebPart 设置的“上下文”。
最后,我的问题是:
- 这是在主页上创建自定义输入 webpart 的正确方法(不是列表自定义表单)吗?
- 如何保持 FormField 的行为(选择正确的控件并处理输入及其到存储格式的转换)?
- 我必须创建自定义 ListFormWebPart 吗?
- 我可以玩 ControlTemplates 吗?
在此先感谢您的帮助...我已经为这个简单的案例苦苦挣扎了好几天...