2011-04-04 2 views
1

Это работало в пятницу, а теперь нет. У меня это в начале UserControl:Ошибка ASP.NET jQuery Datepicker - Что мне не хватает?

<link type="text/css" href="/App_Themes/css/ui-lightness/jquery-ui-1.8.11.custom.css" rel="stylesheet" /> 
<script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script> 
<script src="/Scripts/jquery-ui-1.8.11.custom.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#MainContent_ucSearchControl_dpPickupStart").datepicker(); 
     $("#MainContent_ucSearchControl_dpPickupEnd").datepicker(); 
}); 
</script> 

И дальше вниз, это:

<td><asp:TextBox id="dpPickupStart" runat="server" style="width: 65px"/></td> 
<td><asp:TextBox id="dpPickupEnd" runat="server" style="width: 65px"/></td> 

что приводит (в отображаемой странице) вход управления с:

name="ctl00$ctl00$MainContent$ucSearchControl$dpPickupStart" id="MainContent_ucSearchControl_dpPickupStart" 
name="ctl00$ctl00$MainContent$ucSearchControl$dpPickupEnd" id="MainContent_ucSearchControl_dpPickupEnd" 

И все же, каждый раз, когда загружается страница, я получаю ошибку Javascript, ожидающую Object, которая указывает на местоположение $ (document) .ready.

Что мне не хватает?

EDIT: Firebug сообщает, что: $ не определен [Перерыв на этой ошибке] $ (документ) .ready (функция() {

+0

В подобных ситуациях я обнаружил, что _lot_ легче ориентировать элементы на основе классов, а не id (что Asp.net ворует во время генерации) –

+0

Просмотрите URL-адрес Firefox + Firebug и посмотрите, не связаны ли файлы jquery действительно имеют действительный код ответа, возвращенный сервером? – Chandu

+0

Пара вещей. Во-первых, избегайте жесткого кодирования идентификатора управления. Вместо этого используйте <% = dpPickupStart.ClientID%> для идентификатора, так как он может измениться. Кроме того, это может быть для краткости, но вы должны привязываться к CSS в начале страницы, а не в верхней части вашего User Control. Вы можете иметь раздел контента головки, что делает мой вопрос спорным. –

ответ

2

Будучи пользовательский элемент управления не может гарантировать, что относительный путь к ваши JS-файлы всегда будут корректными в зависимости от расположения родительской страницы в иерархии файловой системы.

Поэтому измените теги JS-скриптов следующим образом, чтобы использовать метод Control.ResolveUrl, который преобразует URL-адрес в один, который можно использовать на запрашивающем клиент.

<script src='<%=ResolveUrl("~/Scripts/jquery-1.5.1.min.js")%>' type="text/javascript"></script> 
<script src='<%=ResolveUrl("~/Scripts/jquery-ui-1.8.11.custom.min.js")%>' type="text/javascript"></script> 

Или ссылка с CDN для дополнительного бонуса кеширования.

jQuery hosted on google
jQuery UI hosted on google

+0

У меня теперь есть и src = "<% = ResolveUrl ("/Scripts/jquery-1.5.1.min.js ")%>" и $ ("# <% = dpPickupStart.ClientID%>"). Datepicker() , который создает тот же html и ту же ошибку. – Michael

+0

@michael извините, неверные цитаты, попробуйте код еще раз. Вы можете попробовать внешнюю ссылку, чтобы доказать эту точку. Если он по-прежнему не работает с внешней ссылкой, он сужает проблему. – Swaff

+1

Мне на самом деле пришлось изменить это, чтобы использовать обозначение ~, прежде чем оно снова начнет его искать. Как это изменилось с субботы, я понятия не имею ... – Michael

0

Эта ошибка возникает из-за Jquery не доступны. Я думаю, что решение Swaff должно работать (+1). Проверьте, доступен ли файл Jquery-1.5.1.min.js в папке Scripts вашего решения. Или также может быть переименована ваша папка Scripts.

HTH.

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