我为我的列表制作了自定义的NewForm.aspx,我想为它添加一些自定义代码。所以我从我自己的班级继承了那个形式:
public class MyCustomNewForm : Microsoft.SharePoint.WebPartPages.WebPartPage
现在我想引用一些可用字段来自动为用户填充它们。 (Javascript在这里没有帮助,因为我必须从其他列表中获取一些数据)。
但我不知道如何从代码隐藏文件中引用这些字段。
在.aspx页面中编写控制字段的代码(好吧,它是由Sharepoint Designer在使用命令插入> SharePoint控件>自定义列表表单... 时生成的),如下所示:
<SharePoint:FormField runat="server" id="ff1{$Pos}" ControlMode="New" FieldName="Title" __designer:bind="{ddwrt:DataBind('i',concat('ff1',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Title')}"/>
在运行时查看id时,它太长了
alt text http://img33.imageshack.us/img33/7495/ss20090713143352.png
那么我如何引用字段,所以我可以在我的代码隐藏文件中为它们设置 Text 属性?
答案 0 :(得分:1)
在您的代码中使用WebDataForm
控件;调用它的方法FindControl(@ID)
。
您可以从生成的页面html中找出ID;使用IE开发人员工具,它应该是$ff21_
,例如ID = ff21
答案 1 :(得分:0)
因此,要使用其他列表中的值预填充NewForm.aspx中的某些字段,请执行以下操作。
简而言之:
制作自定义列表项表单。这样做step-by-step。
创建一个继承自的类
Microsoft.SharePoint.WebPartPages.WebPartPage
在自定义表单aspx&lt;%@ Page上继承该类。我的看起来像这样:Inherits="xx.MeetingWorkspace.Tasks_NewFormxx, xx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5"
在protected override void
OnInit(EventArgs e)
功能使用中
FindControlRecursively找到
带ID的ContentPlaceHolder对象
“PlaceHolderMain”(称之为
函数on this.Controls [0],而不是on
这个对象)。
使用方法HtmlHiddenField
制作HtmlHiddenField.Attributes.Add()
个对象,指定值并添加属性“标题”。第7步你将需要它。
将隐藏字段添加到 你得到了ContentPlaceHolder 先前
P.S。我是sharepoint的初学者,所以最好谨慎使用这些步骤。我很乐意找到一个答案,你可以在代码中引用你的字段,所以我不必使用任何javascript的东西。
我的漫长旅程:
正如我所提到的,我为这个表单继承了我自己的公共类。使用这种技术,应该可以通过使用与表单ID相同的变量名称声明这些类控件来引用现有的表单字段。在屏幕截图中,我有一个TextBox
类对象,其ID为 ctl00_PlaceHolderMain_g_77625 ....等。
现在,在我的课程中,我尝试创建一个与ID同名的变量,但它没有初始化,值为null。我想也许ID正在改变,我检查了,但不,它保持原样。
所以我尝试使用Control.FindControl,但它不会递归搜索,所以我发现了这篇文章:Recursive Page.FindControl。 (您可能希望阅读一些注释,因为有更好的泛型实现)。 重要提示:在使用FindControlRecursive方法之前阅读评论“Sam于2008年8月2日上午4:13”。
所以,有了函数,我将ID作为参数传递 - 仍然没有运气,它只为我返回null。幸运的是,我可以将PlaceHolderMain作为ID传递,它会返回主占位符对象。
因此,解决方法将是覆盖方法OnInit(EventArgs)
生成HtmlHiddenField对象,将其值设置为您想要的任何值,并将这些隐藏字段添加到PlaceHolderMain。 (ContentPlaceHolder.Controls.Add()
)
然后在ASPX页面上使用一些javascript我能够将隐藏字段中的值加载到我的优先字段中(我找到了一种方法来引用我想要的字段javascript。两篇有用的文章:shorter one和longer one)
<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>
此脚本可在this文章的评论中找到。