WebControl在<script>标签中创建JS对象,如何在页面的JS?</script>中获取对象

时间:2013-03-07 23:15:33

标签: javascript asp.net ajax web-controls

我一直在玩自己的WebControls,并试图在不使用MS AJAX的情况下添加一些AJAX功能。我不确定将Web对象的JS对象传递给页面脚本的最佳方法。

我使用Page.ClientScript.RegisterClientScriptResource将我的控件的JS导入浏览器,并通过服务器代码实例化JS(RenderEndTag写出调用new的<script>):

public class SearchBox : WebControl
{
    //...
    public override void RenderEndTag(System.Web.UI.HtmlTextWriter writer)
    {
        //...
        writer.Write("<script type=\"text/javascript\">new SearchBox($('#" + this.ClientID + "'));</script>");
    }
}

现在我需要在特定页面的JS中使用该对象(例如添加valueChanged处理程序)。我该怎么办呢?将控件ID作为键的全局数组是否有效?

2 个答案:

答案 0 :(得分:1)

根据我对你的问题的理解,我会做这样的事情:

public class SearchBox : WebControl
{
    public int SearchBoxControlId { get { return this.ClientID;}}
    //...
    public override void RenderEndTag(System.Web.UI.HtmlTextWriter writer)
    {
        //...
        writer.Write("<script type=\"text/javascript\">new SearchBox($('#" + this.ClientID + "'));</script>");
    }
}


//Other Parent Page
<uc1:SearchBox id="ucSearchBox" runat="server" />
<script>
    $("#SOMEID").change(function (e) {

        var searchBox = $("#<%= ucSearchBox.SearchBoxControlId %>");

        //Do stuff
    });
</script>

答案 1 :(得分:1)

由于您正在使用jQuery,因此您在SearchBox的javascript构造函数中可以执行的操作之一就是:

var SearchBox = function($element) {
    $element.data("searchBox", this);
}

然后你可以在以后再次从jQuery中轻松地检索它:

var sb = $("#myElement").data("searchBox");