Sharepoint 从代码隐藏引用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(

我有一个自定义的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(@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行中呈现一次。我需要从代码后面引用它。谢谢