Error: The name 'RGGSTAcCode' does not exist in the current context

Error: The name 'RGGSTAcCode' does not exist in the current context

在其中一个网页中,我在 FormView 控件中有 RadGrid 即,如下标记:

<asp:FormView ID="fvIPRForm" runat="server" DefaultMode="Insert" DataKeyNames="RequestID"
  DataSourceID="odsIPRForm" EnableModelValidation="True" OnItemInserting="fvIPRForm_ItemInserting"
  OnDataBound="fvIPRForm_DataBound" OnItemUpdating="fvIPRForm_Updating" OnItemCommand="fvIPRForm_ItemCommand">

<%-- Create New IPR--%>
<InsertItemTemplate>

<telerik:RadMultiPage ID="RadMultiPage5" runat="server" SelectedIndex="0" Width="100%">
<telerik:RadPageView ID="RadPageView4" runat="server" Width="100%">
<telerik:RadAjaxPanel ID="RadAjaxPanel4" runat="server">

//RadGrid
<telerik:RadGrid ID="RGGSTAcCode" runat="server" AutoGenerateColumns="false"....>
 //other code

<telerik:GridTemplateColumn UniqueName="AccountCode" HeaderText="Account Code">
  <ItemTemplate>
    <asp:Label ID="lblAcCode" Text='<%# Eval("AccountCode") %>' runat="server"></asp:Label>
  </ItemTemplate>
  <EditItemTemplate>
    <asp:Label ID="lblAcCode2" runat="server" Text='<%# Eval("AccountCode") + " - " + Eval("AccountDescription")%>' Visible="false"></asp:Label>     

    <telerik:RadComboBox ID="ddlAccountCode" runat="server" Height="200" Width="260"
    AllowCustomText="true" onclienttextchange="OnClientTextChange">
    </telerik:RadComboBox>

    <asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" OnClientClick="ButtonClicked()" UseSubmitBehavior="true" />&nbsp;                                      
  </EditItemTemplate>
</telerik:GridTemplateColumn>

</telerik:RadGrid>

</telerik:RadAjaxPanel>
</telerik:RadPageView>
</telerik:RadMultiPage>

</InsertItemTemplate>

<%-- Edit IPR--%>
<EditItemTemplate>

<telerik:RadMultiPage ID="RadMultiPage5" runat="server" SelectedIndex="0" Width="100%">
<telerik:RadPageView ID="RadPageView4" runat="server" Width="100%">
<telerik:RadAjaxPanel ID="RadAjaxPanel4" runat="server">

//RadGrid
<telerik:RadGrid ID="RGGSTAcCode" runat="server" AutoGenerateColumns="false"....>
 //other code

<telerik:GridTemplateColumn UniqueName="AccountCode" HeaderText="Account Code">
  <ItemTemplate>
    <asp:Label ID="lblAcCode" Text='<%# Eval("AccountCode") %>' runat="server"></asp:Label>
  </ItemTemplate>
  <EditItemTemplate>
    <asp:Label ID="lblAcCode2" runat="server" Text='<%# Eval("AccountCode") + " - " + Eval("AccountDescription")%>' Visible="false"></asp:Label>     

    <telerik:RadComboBox ID="ddlAccountCode" runat="server" Height="200" Width="260"
    AllowCustomText="true" onclienttextchange="OnClientTextChange">
    </telerik:RadComboBox>

    <asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" OnClientClick="ButtonClicked()" UseSubmitBehavior="true" />&nbsp;                                      
  </EditItemTemplate>
</telerik:GridTemplateColumn>

</telerik:RadGrid>

</telerik:RadAjaxPanel>
</telerik:RadPageView>
</telerik:RadMultiPage>

</EditItemTemplate>

 <%-- View IPR--%>
<ItemTemplate>

<telerik:RadMultiPage ID="RadMultiPage5" runat="server" SelectedIndex="0" Width="100%">
<telerik:RadPageView ID="RadPageView4" runat="server" Width="100%">
<telerik:RadAjaxPanel ID="RadAjaxPanel4" runat="server">

//RadGrid
<telerik:RadGrid ID="RGGSTAcCode" runat="server" AutoGenerateColumns="false"....>
 //other code

<telerik:GridTemplateColumn UniqueName="AccountCode" HeaderText="Account Code">
  <ItemTemplate>
    <asp:Label ID="lblAcCode" Text='<%# Eval("AccountCode") %>' runat="server"></asp:Label>
  </ItemTemplate>
  <EditItemTemplate>
    <asp:Label ID="lblAcCode2" runat="server" Text='<%# Eval("AccountCode") + " - " + Eval("AccountDescription")%>' Visible="false"></asp:Label>   

    <telerik:RadComboBox ID="ddlAccountCode" runat="server" Height="200" Width="260"
    AllowCustomText="true" onclienttextchange="OnClientTextChange">
    </telerik:RadComboBox>

    <asp:Button ID="btnSearch" runat="server" Text="Search" OnClick="btnSearch_Click" OnClientClick="ButtonClicked()" UseSubmitBehavior="true" />&nbsp;                                      
  </EditItemTemplate>
</telerik:GridTemplateColumn>

</telerik:RadGrid>

</telerik:RadAjaxPanel>
</telerik:RadPageView>
</telerik:RadMultiPage>

</ItemTemplate>

</asp:FormView>

现在,我尝试获取 RadGrid -- EditItemTemplate -- Button 控件 根据用户在 RadComboBox.

中输入的 text 长度,在 JavaScript 内使其可见 true/false

下面是我的JavaScript:

<script lang="javascript" type="text/javascript">
        function OnClientTextChange(sender, eventArgs) {
            //alert("You typed " + sender.get_text());

            var len = sender.get_text().length;
            alert(len);

            var form = $find("<%#RGGSTAcCode.ClientID%>").get_masterTableView();
            alert(form);

        }
</script>

当我 运行 我的网页时,我总是得到以下 error:

The name 'RGGSTAcCode' does not exist in the current context

我尝试更改 JavaScript 代码如下:

var form = document.getElementById('<%=fvIPRForm.FindControl("RGGSTAcCode").ClientID%>'); 
var masterTable = form.get_masterTableView();
alert(masterTable);

但后来我在 "alert" 中得到了 [object Object]。我的代码有什么问题?

编辑

尝试了以下解决方案,除了按钮之外的所有工作都没有 disabled/enabled 在 if/else 中:

function onTextChange(sender, args) {
                //alert("You typed " + sender.get_text());
                var len = sender.get_text().length;
                alert(len);

                var comboID = sender.get_id();
                var btnSearchID = comboID.replace("ddlAccountCode", "btnSearch");
                alert("Alert 1: " + btnSearchID); //getting : contentplaceholder_fviIPRForm_RGGSTAcCode_btnSearch

                var btnCtrl = $get(btnSearchID);
                alert("Alert 2: " + btnCtrl); //getting : [object HTMLInputElement]

                if (len > 5) 
                {
                    alert("greater");

                    btnCtrl.set_enabled(true);
                    btnsearch.set_enabled(true); // enable search button                    
                }
                else 
                {
                    alert("less");

                    btnCtrl.set_enabled(false);
                    btnsearch.set_enabled(false); // disable search button                   
                }               
            }

这可能就是您想要的答案....
不是最好的,但正在工作..

.aspx

    <asp:FormView ID="fv" runat="server" DefaultMode="Insert" OnDataBound="fv_DataBound">
        <InsertItemTemplate>
            <telerik:RadMultiPage ID="RadMultiPage5" runat="server" 
             SelectedIndex="0" Width="100%">
                <telerik:RadPageView ID="RadPageView4" runat="server" Width="100%">
                    <telerik:RadAjaxPanel ID="RadAjaxPanel4" runat="server">
                        <telerik:RadGrid ID="RadGrid1" runat="server" 
                         AutoGenerateColumns="false" 
                         OnNeedDataSource="RadGrid1_NeedDataSource">
                            <MasterTableView>
                                <Columns>
                                    <telerik:GridTemplateColumn HeaderText="Acc">
                                        <ItemTemplate>
                                            <asp:Label ID="lbl" runat="server"
                                             Text='<%# Eval("Acc") %>'></asp:Label>
                                            <telerik:RadComboBox ID="ddlAccountCode" 
                                             runat="server" Height="200" Width="260"
                                             AllowCustomText="true" 
                                             OnClientTextChange="onTextChange">
                                                <Items>
                                                    <telerik:RadComboBoxItem Text="Gg" />
                                                    <telerik:RadComboBoxItem Text="Gg1" />
                                                    <telerik:RadComboBoxItem Text="Gg3" />
                                                </Items>
                                            </telerik:RadComboBox>
                                            <telerik:RadButton ID="btnSearch" runat="server" Text="Search" />
                                        </ItemTemplate>
                                    </telerik:GridTemplateColumn>
                                </Columns>
                            </MasterTableView>
                        </telerik:RadGrid>
                    </telerik:RadAjaxPanel>
                </telerik:RadPageView>
            </telerik:RadMultiPage>
        </InsertItemTemplate>
    </asp:FormView>

Javascript

    <telerik:RadCodeBlock ID="rcb" runat="server">
        <script type="text/javascript">
            function onTextChange(sender, args) {
                var grid = $find('<%=fv.FindControl("RadGrid1").ClientID %>');
                var gridMasterData = grid.get_masterTableView();
                var dataItem = gridMasterData.get_dataItems();
                var length = dataItem.length;

                // Loop
                for (var i = 0; i < length; i++) {
                    // Find Control
                    var comboBox = dataItem[i].findControl("ddlAccountCode");

                    // Check
                    if (comboBox != undefined) {
                        if (sender.get_id() == comboBox.get_id()) {
                            // Find Button
                            var btn = dataItem[i].findControl("btnSearch");
                            var item = sender.get_text();

                            // Check
                            if (item.length > 5) {
                                if (btn != undefined) btn.set_visible(true);
                            }
                            else btn.set_visible(false);

                            break;
                        }
                        else
                            continue;
                    }
                }
            }
        </script>
    </telerik:RadCodeBlock>

.cs

protected void Page_Load(object sender, EventArgs e)
{
    // Check
    if (!IsPostBack)
    {
        // Variable
        DataTable dt = new DataTable();
        DataTable dt1 = new DataTable();
        dt.Columns.Add("Acc");

        dt1.Columns.Add("a");

        // Loop
        for (int i = 0; i < 2; i++)
            dt.Rows.Add("a " + i);

        dt1.Rows.Add("AAAA");



        ViewState["Data"] = dt;

        // Bind
        fv.DataSource = dt1;
        fv.DataBind();

        dt.Dispose();
        dt1.Dispose();
    }
}

protected void fv_DataBound(object sender, EventArgs e)
{
    // FindControl
    RadGrid RadGrid1 = fv.FindControl("RadGrid1") as RadGrid;

    // Check
    if (RadGrid1 != null)
    {
        RadGrid1.DataSource = ViewState["Data"] as DataTable;
        RadGrid1.DataBind();
    }
}

protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    RadGrid rg = fv.FindControl("RadGrid1") as RadGrid;

    // Check
    if (rg != null)
    {
        rg.DataSource = ViewState["Data"] as DataTable;
    }
}

根据我的要求,以下代码运行良好:

function onTextChange(sender, args) {
                var len = sender.get_text().length;
                //alert(len);

                var comboID = sender.get_id();
                var btnSearchID = comboID.replace("ddlAccountCode", "btnSearch");
                var btnCtrl = document.getElementById(btnSearchID);

                if (len >= 5) 
                {
                    btnCtrl.disabled = false;
                    //btnCtrl.style.display = "";
                }
                else 
                {
                    btnCtrl.disabled = true;
                    //btnCtrl.style.display = "none";
                }               
            }