views:

241

answers:

1

ok, I'm working on a custom control that can contain some javascript, and read this out of the page into a string field.

This is a workaround for dynamic javascript inside an updatepanel.

At the moment, I've got it working, but if I try to put a server tag inside the block:

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

The compiler does not like it. I know these are generated at runtime, and so might not be compatible with what I'm doing, but does anyone have any idea how I can get that working?

EDIT

Error message is: Code blocks are not supported in this context

EDIT 2

The control:

[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  A: 

The compiler is write, server side code blocks are only supported within the context of an ITemplate.

The "Text" property should be set like this ...

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

Using ITemplate you can declare it in the codebehind as ...

public ITemplate Text
{
    get;
    set;
}

But then you would need to do this ...

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

Having said that, if you have a custom control why not just do this in the code behind ...

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

Trouble is, it's not very dynamic.

I would favour the templated option. Harder to implement though.

Wardy
Will it be convertable to a string via the ITemplate option?
Ed Woodcock