AJAX & ASP.net, ссылка на серверные элементы управления во внешнем файле - PullRequest
3 голосов
/ 26 мая 2009

У меня есть немного JavaScript на странице ASP.NET, которая выглядит следующим образом:

var list = $get('<%=Topics.ClientID %>');

У меня есть много функций, написанных сейчас, где используется этот синтаксис, и я хотел бы централизовать мой JavaScript и переместить его во внешний файл JavaScript. Однако это нарушается, поскольку «Темы» не могут быть найдены.

Какова лучшая стратегия, чтобы заставить это работать? Я предполагаю, что должен передать управляющую информацию в качестве параметра функции, но я не могу заставить синтаксис работать. Есть предложения?

Ответы [ 3 ]

1 голос
/ 10 июня 2009

Это общая проблема для разработки ASP.NET JS. Что касается меня, я использую один и тот же подход каждый раз, и он выглядит хорошо.

Я привык к ООП в Javascript, поэтому большинство моих внешних файлов JS выглядит так:

function CouponManager()
{
}

И в коде .aspx я делаю:

<script language="javascript">
    var couponManager = new CouponManager();
</script>

Если мне нужно передать некоторые параметры, я изменяю объявление класса на:

function CouponManager(params)
{
    // .. stuff here

    this.initialize = function(initParams)
    {
       // .. accessing initParams variable for server control IDs
    };

    this.initialize(params);
}

А из кода .aspx я делаю следующее:

<script language="javascript">
    var couponManager = new CouponManager
    ({
        txtCouponNameId = '<%= txtCouponName.ClientID %>',
        txtCouponDescriptionId = '<%= txtCouponDescription.ClientID %>'
    });
</script>

Этот подход позволяет мне отделить JS от страницы .aspx и иметь все зависимости управления сервером в одном теге.

1 голос
/ 26 мая 2009

Вы должны создать метод javascript внутри usercontol, который возвращает клиентский элемент. Затем на другой странице / в контроле просто получите доступ к этому методу

В пользовательском контроле

 <script language="javascript">
     function GetTopics() {
          return = $get('<%=Topics.ClientID %>');
     } 
 </script>

На другой странице / элемент управления

 <script language="javascript">
     var list = GetTopics();
 </script>

Edit - проблема, с которой вы сталкиваетесь, заключается в том, что вам нужен Topics.ClientID там, где его нет. Таким образом, единственный реальный способ преодолеть этот разрыв - поставить его в общее место. Если вы действительно не хотите этого делать, вы можете попробовать выбрать элемент по некоторым другим критериям. Если вы используете jQuery, вы можете пометить элемент с классом Тем, а затем найти его с помощью $ (". Темы").

0 голосов
/ 04 июня 2009

, если вы знаете, что у вас есть только один серверный элемент управления, называемый «Темы» на страницу, и вы используете соглашения об именах, которые вы можете наследовать от каких-либо тем элемента управления (может быть, это HiddenField? Вы не указали) и переопределить его ClientId getter возвращает свой идентификатор сервера следующим образом:

http://andreascode.wordpress.com/2009/04/27/tiny-drips-of-aspnet-juice/

тогда вы можете знать в своих файлах javascript, что на странице будет скрытое поле с идентификатором «Темы», и использовать это напрямую.

в зависимости от вашего домена / ситуации, это может сэкономить вам много времени или затратить слишком много времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...