【问题标题】:Error: The name 'RGGSTAcCode' does not exist in the current context错误:当前上下文中不存在名称“RGGSTAcCode”
【发布时间】:2015-09-28 09:11:51
【问题描述】:

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

<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 控件 在 JavaScript 中,根据用户在RadComboBox 中输入的 文本 长度使其可见真/假。

下面是我的 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>

当我运行我的网页时,我总是出现以下错误

当前上下文中不存在名称“RGGSTAcCode”

我尝试将 JavaScript 代码更改如下:

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

但后来我在“警报”中收到[object Object]。我的代码有什么问题?

编辑

尝试了下面的解决方案,除了按钮之外的所有工作都没有在 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                   
                }               
            }

【问题讨论】:

    标签: javascript asp.net telerik radgrid


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。请注意,RadComboBox 和 Button 位于 EditItemTemplateRadGrid 内。我试过你的代码,我得到alert("dataItem :" +dataItem); 为空白/空。由于这个alert(length); 也是空白的。另外,我又尝试了 1 种方法(请检查我发布的问题中的 Edit 部分),IF/ELSE 中的按钮没有被禁用。请让我知道我错在哪里?请回复
    • 另外,当我在“for”循环中硬编码length=5 时,在你的代码中,我得到错误:cannot read property 'findcontrol' of undefined。请让我知道我的代码有什么问题?请回复
    • 将您的 var btnCtrl = $get(btnSearchID); 更改为 var btnCtrl = $find(btnSearchID);。那么findcontrol 区分大小写...findControl() 仅适用于Telerik Control only。那么您期望什么...您上面的代码在下面是可见的,它是如何工作的...
    • 感谢您的回复。我更改了var btnCtrl = $find(btnSearchID);,但我在警报框中得到了空值。在我的 Edit 中也进行了更改。对于我的第二个回复,请忽略findcontrol(输入错误),它的findControl。请回复我应该对您的代码进行哪些更改(基于我的错误)以使其正常工作?
    • nvm findcontrol 你的按钮不是telerik control 所以只需使用document.getElementById(btnSearchID); 然后btnCtrl.disabled = false;btnCtrl.disabled = true;
    【解决方案2】:

    根据我的要求,以下代码可以正常工作:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-01
      • 2010-12-17
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多