2015-09-28 6 views
0

В одном из веб-страницы, у меня есть RadGrid внутри FormView управления т.е., как показано ниже разметке:Ошибка: Имя «RGGSTAcCode» не существует в текущем контексте

<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, чтобы сделать его видимым true/false на основе текст длина, которую пользователь вводит в 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> 

Когда я запускаю мою веб-страницу, я всегда получаю ниже ошибки:

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); 

, но затем я получаю [object Object] в разделе «Предупреждение».

Пожалуйста, дайте мне знать, что не так в моем коде. Заранее спасибо.

Edit: Пробовал ниже решения, все работает кроме кнопки не отключены/включены внутрь, если/другое:

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

Пожалуйста, дайте мне знать, что это неправильно в моем коде. Пожалуйста, ответьте

ответ

0

Ниже код работает нормально на основе моего требования:

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

Это может быть ответ, который вы хотите ....
Не самый лучший, но работает ..

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

Thankyou для ответа. Обратите внимание, что RadComboBox и Button находятся внутри 'EditItemTemplate'' RadGrid'. Я пробовал ваш код, и я получаю 'alert (" dataItem: "+ dataItem);' как blank/null. Из-за этого 'alert (length);' также пуст. Кроме того, я попробовал еще один метод (пожалуйста, проверьте ** Редактировать ** раздел в моем размещенном вопросе), там кнопка не отключается внутри IF/ELSE. Пожалуйста, дайте мне знать, где я ошибаюсь. Пожалуйста, ответьте – user3196511

+0

Кроме того, в коде ur, когда я hardcode 'length = 5' в цикле for for, я получаю ошибку:' can not read property 'findcontrol' undefined'. Пожалуйста, дайте мне знать, что не так в моем коде? Пожалуйста, ответьте – user3196511

+0

Измените свой 'var btnCtrl = $ get (btnSearchID);' to 'var btnCtrl = $ find (btnSearchID);'. то 'findcontrol' чувствителен к регистру ...' findControl() 'будет работать только для« Telerik Control only ». Тогда, что вы ожидаете ... ваш код выше включен ниже, видно, как он может работать ... – Nic