2013-04-22 4 views
3

У меня есть страницы ASP.NET, где я вызов функции JavaScript, как это:Не получать ClientID в ASP.Net

Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox> 
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" OnClientClick="return AlertOnGo('View Configuration',document.getElementById('<%= txt_name.ClientID %>').value)" Text ="GO!" /> 

Но нажав на кнопку GO, я получаю следующее сообщение об ошибке:

JavaScript ошибки времени выполнения: Невозможно получить свойство «значения» неопределенной или нулевой ссылки

на просмотре обработанного кода для кнопки:

<input type="submit" name="btn_view" value="GO!" onclick="return AlertOnGo('View Configuration',document.getElementById('<%= txt_name.ClientID %>').value);" id="btn_view" /> 

Он не помещает соответствующий идентификатор ClientID. Я попытался установить для CLientIDMode значение static для тестового окна, но не помогло.

Этот вопрос похож на этот unanswered question.

+0

Я думаю, что это происходит потому, что при рендеринге вашего asp.net textbox, он был другим идентификатором, а не тем, что вы видите при редактировании html .. –

+0

Посмотрите, может ли это вам помочь, http://stackoverflow.com/questions/8844675/asp-net-document-getelementbyid-control- clientid-returns-null –

ответ

6

Существует несколько решений этой проблемы.

Одним из простых было бы переместить имя в переменную JavaScript, поскольку проблема возникает только в элементе управления при попытке оценить txt_name.ClientID внутри атрибута OnClientClick элемента управления ASP.NET.

<script> 
var txtName = '<%= txt_name.ClientID %>'; 
</script> 

Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox> 
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" 
OnClientClick="return AlertOnGo('View Configuration', 
document.getElementById(txtName).value)" Text ="GO!" /> 
0

- отредактированный ответ - ASPX

 
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" OnClientClick="javascript:return AlertOnGo('View Configuration');" Text ="GO!" /> 

сценарий

 
function AlertOnGo(mode) 
{ 
    var btnId = '<%= txt_name.ClientID %>'; 
    var value=document.getElementById(btnId).value; 

//your code 

return false; 
} 
+0

Это не сработало. Та же проблема. Часть '<% = txt_name.ClientID%>' не выполняется и не отображается, как на веб-странице. –

+0

проверить отредактированный ответ –

+0

Я думаю, что это сработает. Но мне нужно вызвать ту же функцию JavaScript с разными идентификаторами текстовых полей и, следовательно, нужно перенести эту часть из нее. См. Ответ Джейкоба выше. Он работает, устанавливая имя txtName каждый раз перед вызовом функции AlertOnGo. –

0

Youre использованием <% =%> в собственности на веб-управления ASP.NET - я Wouldnt ожидать, что работа, так как весь элемент управления будет заменен на html.

Я бы переместил ваш javascript в блок сценария и привязал обработчик события в коде, а не помещал его в строку.

Enter server name: <asp:TextBox ID="txt_name" runat="server"></asp:TextBox> 
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" Text ="GO!" /> 
<script> 
document.getElementById('<%= btn_view.ClientID %>').attachEvent('click', function() { 
    return AlertOnGo('View Configuration', 
         document.getElementById('<%= txt_name.ClientID %>').value); 
}); 
</script> 
3

вы можете использовать свойство ClientIDMode="Static" внутри жерех: текстовое поле тега

как этот

<asp:TextBox ClientIDMode="Static" ID="txt_name" runat="server"></asp:TextBox> 
<asp:Button ID="btn_view" runat="server" OnClick="View_btn_click" 
OnClientClick="return AlertOnGo('View Configuration', 
document.getElementById(txtName).value)" Text ="GO!" /> 

Таким образом, идентификатор клиента текстового поля будет такой же, как «ид» и вы можете использовать document.getElementById('txt_name').value

и это работает для меня

0

Я предпочитаю использовать String.Concat. Вы можете использовать вместо апострофа \ u0027.

OnClientClick='<%#String.Concat("document.getElementById(\u0027", AddToCartBtn.ClientID.ToString(), "\u0027).value = \u0027Adding...\u0027;")%>' 
0

Другим решением вы можете пойти в браузере сделать элемент насекомых читать динамический идентификатор текстового поля и установить, что в JavaScript, как:

var ddlFunction = document.getElementById('ctl00_SPWebPartManager1_g_ecede3f6_2b87_405a_af1b_70401bb8d4c7_ddlFunction'); 

Html:

<asp:DropDownList ID="ddlFunction" runat="server" CssClass="dropDownClass"> 
    <asp:ListItem Selected="True">Select One</asp:ListItem> 
    <asp:ListItem>Sample 1</asp:ListItem> 
    <asp:ListItem>Sample 2</asp:ListItem> 
</asp:DropDownList> 
Смежные вопросы