#不要介意这个痛苦的解决方案,但向下滚动查看编辑。呃,我找到了解决方法。但是警告!如果您不需要使用任何 Sharepoint 对象来动态访问任何值,那么这篇文章不适合您,相反,您想阅读一些参考文章。
因此,要使用其他列表中的值预先填充 NewForm.aspx 中的某些字段,请执行以下操作。
简而言之:
制作您的自定义列表项表单。一步一步做。
创建一个继承自的类
Microsoft.SharePoint.WebPartPages.WebPartPage
在您的自定义表单 aspx <%@ Page 上继承该类。我的看起来像这样:Inherits="xx.MeetingWorkspace.Tasks_NewFormxx, xx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5"
在protected override void OnInit(EventArgs e)
函数中使用
FindControlRecursively查找 ID 为“PlaceHolderMain”的 ContentPlaceHolder 对象(在 this.Controls[0] 上调用该函数,而不是在此对象上)。
使用方法制作HtmlHiddenField
对象、赋值并添加属性“标题” HtmlHiddenField.Attributes.Add()
。第 7 步将需要它。
将隐藏字段添加到您之前获得的 ContentPlaceHolder。
使用 Javascript(阅读此处或此处)将所需字段从隐藏字段值填充到用户看到的那些字段。
PS我是sharepoint的初学者,所以最好谨慎使用这些步骤。我很高兴找到一个答案,您可以在其中引用代码中的字段,因此我不必使用任何 javascript 的东西。
我的漫长旅程:
正如我所提到的,我为这个表单继承了我自己的公共课程。使用这种技术,应该可以通过使用与表单 ID 相同的变量名称声明这些类控件来引用现有的表单字段。在屏幕截图中,我有一个ID为 ctl00_PlaceHolderMain_g_77625.... 等TextBox
的类对象。
现在,在我的班级中,我尝试创建一个与 ID 同名的变量,但它没有初始化并且值为 null。我想也许 ID 正在更改,我检查了,但不,它保持原样。
所以我尝试使用Control.FindControl,但它不会递归搜索,所以我找到了这篇文章:Recursive Page.FindControl。(您可能想阅读一些评论,因为泛型有更好的实现)。重要提示:在使用 FindControlRecursive 方法之前,请阅读评论“Sam on August 2, 2008 4:13 AM”。
所以,有了这个函数,我将 ID 作为参数传递了 - 仍然没有运气,它只是为我返回 null。幸运的是,我可以将 PlaceHolderMain 作为 ID 传递,它会返回我的主要占位符对象。
因此,解决方法是在覆盖方法上OnInit(EventArgs)
制作 HtmlHiddenField 对象,将它们的值设置为您想要的任何值,并将这些隐藏字段添加到 PlaceHolderMain 。( ContentPlaceHolder.Controls.Add()
)
然后在 ASPX 页面上使用一些 javascript,我能够将隐藏字段中的值加载到我的首选字段(好吧,我找到了一种使用 javascript 引用我想要的字段的方法。两篇有用的文章:较短的一篇和较长的一篇)
#Edit:不那么痛苦的解决方案哦,很高兴我找到了这个。使用jPoint(用于 SharePoint 的 jQuery),然后使用一些脚本,您可以使用查询字符串参数来预填充列表字段。
<script type="text/javascript" src="//sharejpoint.googlecode.com/files/jPointLoader-0.6-expanded.js" ></script>
<script>
$(document).ready(function() {
jP.Form.readForm();
$.each(jP.Form.Items, function (idx, item) {
if(querySt(item.Name) != null && querySt(item.Name) != "undefined")
jP.Form[item.Name].val(unescape(querySt(item.Name)));
});
});
//Gets value of querystring key
function querySt(ji)
{
hu = window.location.search.substring(1);
gy = hu.split("&");
for (i=0;i<gy.length;i++)
{
ft = gy[i].split("=");
if (ft[0].toUpperCase() == ji.toUpperCase()) //Fixed query so it is case insensitive
{
return ft[1];
}
}
}
</script>
此脚本可在本文的评论中找到。