首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP CompositeControl & ScriptManager

ASP CompositeControl & ScriptManager
EN

Stack Overflow用户
提问于 2010-01-28 21:20:02
回答 1查看 1.3K关注 0票数 1

我对WebControl / CompositeControl世界真的很陌生,而且我还有一个小测试课在玩。它只是一个点击时更新的LinkButton。当我把它排除在UpdatePanel之外的时候,一切都很好。但是当我试图在里面运行它时,我仍然会得到一个完整的页面回复。如何使这个类在UpdatePanel中工作

这是一堂课:

代码语言:javascript
复制
public class Test2 : CompositeControl 
{
    private static readonly object testButtonEvent = new object();

    public event EventHandler OnTestClick
    {
        add { Events.AddHandler(testButtonEvent, value); }
        remove { Events.RemoveHandler(testButtonEvent, value); }
    }

    private LinkButton testLinkButton;

    public virtual string testLinkButtonText
    {
        get
        {
            object o = ViewState["testLinkButtonText"];
            return (o == null) ? String.Empty : (string)o;
        }
        set
        {
            if (value == null)
                ViewState.Remove("testLinkButtonText");
            else
                ViewState["testLinkButtonText"] = value;
        }
    }   

    protected override void OnInit(EventArgs e)
    {
        /* This stuff makes it ajax friendly but stops the text rendering
        EnsureChildControls();

        ScriptManager ScMan = ScriptManager.GetCurrent(Page);
        if (ScMan != null)
        {
            ScMan.RegisterAsyncPostBackControl(testLinkButton);
        }            */

        base.OnInit(e);
    }

    protected override void CreateChildControls()
    {
        Controls.Clear();

        testLinkButton = new LinkButton();
        testLinkButton.Command += new CommandEventHandler(testClick);
        testLinkButtonText = "Test ViewState Text";

        Controls.Add(testLinkButton);
    }

    void testClick(object sender, CommandEventArgs e)
    {
        testLinkButtonText = "Updated Text On " + DateTime.Now.ToLongTimeString();
    }

    protected override void Render(HtmlTextWriter writer)
    {
        RenderContents(writer);
    }

    protected override void RenderContents(HtmlTextWriter writer)
    {
        EnsureChildControls();

        testLinkButton.Text = testLinkButtonText;
        testLinkButton.RenderControl(writer);            
    }

}

OnInit()中的代码会使控件正确发布,但我无法获得LinkButton的更新文本。它仍然在触发事件--当我调试时,我可以看到它正在被调用。设置此控件以便在UpdatePanel中使用的正确方法是什么?

用法,以防万一:

代码语言:javascript
复制
<asp:UpdatePanel runat="server" UpdateMode="Conditional">
    <ContentTemplate>
        <cc:Test2 ID="jqTest02" runat="server" />
    </ContentTemplate>
</asp:UpdatePanel>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-28 21:23:51

您必须在驱动UpdatePanel的客户端javascript中使用ID UpdatePanel。更具体地说,它列在要拦截和执行异步回发的控件列表中。

代码语言:javascript
复制
testLinkButton.ID = "btn";
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2158033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档