2013-09-26 4 views
0

У меня есть проблема со страницей под masterPage. моя маленькая мягкая генерирует случайное значение с четким кодом, а затем подсчитывает значение i от 0 до значения с клиентским скриптом. Когда я запускаю программу без masterpages, она работает, но когда я пытался запустить ее из вложенной страницы, она не работает. здесь мой код:javaScript в ASP с MasterPage

мачтовая страница имеет только ContentPlaceHolder. вложенным веб-формы:

asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
<ContentTemplate> 

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
<asp:Button ID="Button1" runat="server" Text="Button" /> 
<asp:Label ID="Label2" runat="server" Text="0"></asp:Label> 

</ContentTemplate> 
</asp:UpdatePanel> 
</asp:Content> 

острый код:

Random rnd = new Random(); 
     int q = rnd.Next(); 
     Label1.Text = q.ToString(); 

     ScriptManager.RegisterClientScriptInclude(this.Page, typeof(Page), "counter", "myjs.js"); 
     Button1.Attributes.Add("onclick", "counter(); return false;"); 

сценарий:.

function counter() { 
var q = Number(document.getElementById("Label1").innerHTML);  
var i = Number(document.getElementById("Label2").innerHTML); 
if (i < q) { 
    i += 1; 
    document.getElementById("Label2").innerHTML = i; 
    setTimeout(function() { counter(); }, 10); 
} 
} 

Ошибка здесь вар Q = Number (document.getElementById ("Label1") innerHTML); и текст ошибки: Ошибка выполнения Microsoft JScript: Требуется объект

+1

во избежание дублирования идентификаторов, когда у вас есть главная страница, все элементы управления имеют свои идентификаторы (добавлен префикс). Таким образом, ваш «Label1» больше не имеет этого идентификатора - если вы посмотрите на источник HTML или используете инспектор Chrome или Firebug, вы увидите, что такое настоящий идентификатор. –

+0

настройте asp-элементы управления, которые вы хотите настроить с помощью javascript, на 'ClientIDMode =" Static ", и элементы управления сохранят свои исходные идентификаторы при откачивании в качестве идентификаторов клиентов – adaam

ответ

1

Вы не получаете экземпляр элемента с помощью getElementById, потому что двигатель ASP.Net изменяют сгенерированный идентификатор клиента в результате HTML.

Чтобы избежать этого, если вы используете инфраструктуру .net 4 или более поздней версии, вы можете добавить свойство ClientIDMode="Static" в элементы управления сервером, в которых вы хотите иметь один и тот же идентификатор клиента и сервера.

Смежные вопросы