Javacript дата контроля не работы на производственном сервере
У меня есть пользовательский элемент управления date picker, который размещен на главной странице. когда я запускаю приложение на локальном компьютере, появляется всплывающее окно для выбора даты, а на производственном сервере я смог выбрать дату в IE. Теперь все внезапное всплывающее окно даты не появляется на рабочем сервере, когда я отлаживаю это приложение на рабочем сервере, оно дает неперехваченное исключение.Я получаю исключение в приведенном ниже javascript
var formname = document.getElementById(txtBox).form.name;
Я ничего не получаю в переменной formname, но то же самое работает раньше и на локальной машине. разница, которую я обнаружил, была в том, что префикс ctl00_ приходил на локальную машину, в то время как на производственном сервере префикс ctl00 не приходит сейчас, так в чем же может быть причина?
Я использую ASP.net 2.0 фреймворк. ниже приведен мой код
Asp.net код :
<asp:textbox id="tbDate" runat="server" Width="104px" CssClass="clsTextBox"> <asp:Image id="imgCal" Visible="True" runat="server" ImageUrl="../images/calendar.jpg"/>с фоновым кодом:
protected override void OnPreRender(EventArgs e) { // base.OnPreRender(e); tbDate.Attributes.Add("onkeypress", "javascript:return WriteProtect()"); imgCal.ImageUrl = "../images/calendar.jpg"; imgCal.Attributes.Add("onclick", "javascript:cbfshowcalendar('" + imgCal.ClientID + "','" + tbDate.ClientID + "');event.cancelBubble=true;"); if(!Page.ClientScript.IsStartupScriptRegistered("CalendarJS")) { Page.ClientScript.RegisterStartupScript(this.GetType(), "CalendarJS", "<script type='text/javascript' src='../include/calendar.js'></script>"); } }
Язык JavaScript :
function cbfshowcalendar(imgObj, txtBox) { //The current size of the IFRAME is width=167 and height=185 //var x=eval("document.all." + imgname + ".offsetLeft"); //var y=eval("document.all." + imgname + ".offsetTop"); var objname = txtBox; var imgname = imgObj; var formname = document.getElementById(txtBox).form.name; -- gets nothing in formname var x=findPosX(eval("document.all." + imgname)); var y=findPosY(eval("document.all." + imgname)); var max_x = window.screen.width; var max_y = window.screen.height-100; . . . . function cbfloadmefirst(formname, objname) { var tempObj; var tempDate; tempObj = eval("document." + formname + "." + objname); -- error on this line Tags
Что я уже пробовал:
я обнаружил, что префикс ctl00_ приходит на локальную машину, в то время как на производственном сервере префикс ctl00 не приходит сейчас, так в чем же может быть причина?
Richard Deeming
Похоже, что сервер настроен для запуска вашего приложения в пуле приложений .NET 4.0, в то время как ваша локальная машина запускает его в пуле приложений .NET 2.0.
Member 1151923
Спасибо за ответ, но он установлен только на .NET 2.0
Richard Deeming
Пропажа ctl00
префикс противоречит этому. Это вызвано тем, что ClientIDMode
, который был добавлен в .NET 4.0:
https://weblog.west-wind.com/posts/2009/Nov/07/ClientIDMode-in-ASPNET-40[^]