Ссылка на элемент управления внутри шаблона XSL из кода позади? - PullRequest
0 голосов
/ 06 апреля 2010

У меня есть пользовательский NewItem.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"/>

Теперь я хочу сослаться на ddlSectors из моей библиотеки кода, но он всегда выбрасывает ссылку на объект, не установленную в экземпляр объекта.

Я считаю, что это потому, что элемент управления находится внутри шаблона XSL.

так есть ли обходной путь для этого?

спасибо

Ответы [ 2 ]

0 голосов
/ 07 апреля 2010

Спасибо, Янис

твоя Идея вдохновила меня.

но вот функция, которая работала для меня

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;
    }

Я использовал это, и это сработало

спасибо

0 голосов
/ 06 апреля 2010

Вопрос: отображается ли этот выпадающий список в каждой строке?

Но вы можете попробовать сослаться на родительский элемент управления и использовать метод Control.FindControl , чтобы получить этот элемент управления.

Однако, если вы точно не знаете, какой элемент управления может быть родительским, вы можете написать собственный метод 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;
        }
}

Тогда просто позвоните FindControlRecursive<DropDownList>("ddlSectors").

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...