Sharepoint 从代码隐藏引用XSL模板内的控件?
我有一个自定义的NewItem.aspx,我是通过从现有的aspx创建一个新的aspx来创建的 我想在XSL模板中放置一行控件,如下所示Sharepoint 从代码隐藏引用XSL模板内的控件?,sharepoint,Sharepoint,我有一个自定义的NewItem.aspx,我是通过从现有的aspx创建一个新的aspx来创建的 我想在XSL模板中放置一行控件,如下所示 <asp:DropDownList ID="ddlSectors" AutoPostBack="true" runat="server" __designer:bind="{ddwrt:DataBind('i',ddlSectors,'SelectedValue','TextChanged','ID',ddwrt:EscapeDelims(string(
<asp:DropDownList ID="ddlSectors" AutoPostBack="true" runat="server" __designer:bind="{ddwrt:DataBind('i',ddlSectors,'SelectedValue','TextChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Sector')}">
</asp:DropDownList>
<!--<SharePoint:FormField runat="server" id="ff7{$Pos}" ControlMode="New" FieldName="Sector" __designer:bind="{ddwrt:DataBind('i',concat('ff7',$Pos),'Value','ValueChanged','ID',ddwrt:EscapeDelims(string(@ID)),'@Sector')}"/>-->
<SharePoint:FieldDescription runat="server" id="ff7description{$Pos}" FieldName="Sector" ControlMode="New"/>
现在我想引用代码库中的DDL扇区,但它总是抛出一个未设置为对象instatnce的对象引用
我认为这是因为控件位于XSL模板内
那么有什么解决办法吗
谢谢问题:是不是每行都呈现了dropdownlist 但您可以尝试引用父控件并使用方法获取该控件 但是,如果您不确切知道哪个控件可以是父控件,则可以编写自定义FindControlRecursive方法来搜索该控件,无论该控件位于何处
using System.Web.UI;
namespace MyNamespace
{
public static class ControlExtensions
{
public static T FindControlRecursive<T>(this Control parentControl, string id) where T : Control
{
T ctrl = default(T);
if ((parentControl is T) && (parentControl.ID == id))
return (T)parentControl;
foreach (Control c in parentControl.Controls)
{
ctrl = c.FindControlRecursive<T>(id);
if (ctrl != null)
break;
}
return ctrl;
}
}
然后打电话给FindControlRecursiveddlSectors。谢谢Janis
你的想法启发了我
但这是对我有用的函数
Control FindControl2(ControlCollection col,string desiredID)
{
Control found=default(Control);
if (found != null)
return found;
for (int i = 0; i < col.Count; i++)
{
Control temp = col[i];
if (temp != null)
{
if (temp.ID != null)
{
if (temp.ID == desiredID)
{
found = temp;
break;
}
else
{
if (found != null)
return found;
else
found=FindControl2(temp.Controls, desiredID);
}
}
else
{
if (found != null)
return found;
else
found = FindControl2(temp.Controls, desiredID);
}
}
}
return found;
}
我用了这个,它成功了
谢谢您好,这不是gridview中的内容,也不是自定义NewItem.aspx表单中的内容,因此dropdownlist只在单个html行中呈现一次。我需要从代码后面引用它。谢谢