C # пользовательский элемент управления, чтобы получить внутренний текст в виде строки - PullRequest
4 голосов
/ 20 мая 2010

хорошо, я работаю над пользовательским элементом управления, который может содержать некоторый JavaScript, и считал это со страницы в строковое поле.

Это обходной путь для динамического JavaScript в панели обновления.

На данный момент у меня это работает, но если я попытаюсь поместить тег сервера в блок:

<custom:control ID="Custom" runat="server">
    <%= ControlName.ClientID %>
</custom:control>

Компилятору это не нравится. Я знаю, что они генерируются во время выполнения и поэтому могут быть несовместимы с тем, что я делаю, но кто-нибудь знает, как мне это сделать?

EDIT

Сообщение об ошибке: блоки кода не поддерживаются в этом контексте

РЕДАКТИРОВАТЬ 2

Контроль:

[DataBindingHandler("System.Web.UI.Design.TextDataBindingHandler, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"), ControlValueProperty("Text"), DefaultProperty("Text"), ParseChildren(true, "Text"), AspNetHostingPermission(SecurityAction.LinkDemand, Level = AspNetHostingPermissionLevel.Minimal), AspNetHostingPermission(SecurityAction.InheritanceDemand, Level = AspNetHostingPermissionLevel.Minimal)]
public class CustomControl : Control, ITextControl
{
    [DefaultValue(""), Bindable(true), Localizable(true)]
    public string Text
    {
        get
        {
            return (string)(ViewState["Text"] ?? string.Empty);
        }

        set
        {
            ViewState["Text"] = value;
        }
    }
}

1 Ответ

1 голос
/ 20 мая 2010

Компилятор - запись, серверные кодовые блоки поддерживаются только в контексте ITemplate.

Свойство "Текст" должно быть установлено следующим образом ...

<custom:control ID="Custom" runat="server" Text="YourText">

Используя ITemplate, вы можете объявить его в коде как ...

public ITemplate Text
{
    get;
    set;
}

Но тогда вам нужно будет сделать это ...

<custom:control ID="Custom" runat="server">
   <Text><%= ControlName.ClientID %></Text>
</custom:control>

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

this.text = ((ITextControl)Page.FindControl(controlName)).Text;

Проблема в том, что он не очень динамичен.

Я бы предпочел вариант с шаблонами.Труднее реализовать, хотя.

...