【发布时间】:2011-08-23 02:07:07
【问题描述】:
在我的主页上,我想要一个简单的 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 吗?
提前感谢您的帮助...我已经为这个简单的案例苦苦挣扎了好几天...
【问题讨论】:
-
您需要在页面中的 PageLoad 事件中以编程方式设置 ListId 属性
标签: sharepoint sharepoint-2010 controltemplate dataformwebpart