C#自定义控件:获取内部文本作为字符串

4

好的,我正在开发一个自定义控件,它可以包含一些JavaScript,并将其读取到一个字符串字段中。

这是解决更新面板内动态JavaScript的一种方法。

目前,我已经让它工作了,但如果我尝试在块内放置服务器标记:

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

编译器不喜欢这个。我知道这些是在运行时生成的,所以可能与我的操作不兼容,但有没有人知道我如何让它工作?
编辑
错误信息是:此上下文不支持代码块。
编辑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;
        }
    }
}

你遇到了什么错误?控件名称是什么?如果它是你编写的自定义控件的ID,那么应该是Customer.ClientID而不是ControlName.ClientID。 - 24x7Programmer
控件的名称只是虚构的名称,以便说明我想要实现的内容,我认为对于我的控件使用标签custom:control是相当愚蠢的 :) - Ed James
你的自定义控件是容器控件吗? - Daniel Dyson
@Daniel,这基本上只是一个文本框/文字样式的东西。我会在我的示例中添加属性。 - Ed James
1个回答

1

编译器是正确的,在服务器端,代码块仅在ITemplate上下文中得到支持。

"Text" 属性应该设置为这样...

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

通过使用ITemplate,您可以在CodeBehind中声明它...

public ITemplate Text
{
    get;
    set;
}

但是你需要这样做...

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

话虽如此,如果您有自定义控件,为什么不直接在代码后台处理呢...

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

问题在于它不够动态。

我更倾向于使用模板选项。 不过实现起来更困难。


通过ITemplate选项,它是否可以转换为字符串? - Ed James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接