编程语言
首页 > 编程语言> > C#自定义控件将内部文本作为字符串

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

作者:互联网

好吧,我正在开发一个可以包含一些javascript的自定义控件,并将其从页面中读入字符串字段.

这是updatepanel中动态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;
        }
    }
}

解决方法:

编译器是写入的,服务器端代码块仅在ITemplate的上下文中受支持.

“Text”属性应该像这样设置……

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

麻烦的是,它不是很有活力.

我赞成模板化选项.
虽然难以实施.

标签:c,asp-net,custom-controls
来源: https://codeday.me/bug/20190710/1422553.html