#javascript #asp.net #webforms
#javascript #asp.net #веб-формы
Вопрос:
Я пытаюсь очистить некоторый старый код, и в настоящее время он использует переменные, установленные с помощью ScriptManager для использования в коде Javascript для отображения / скрытия частей страницы.
Переменные в настоящее время просто _showNameDiv
и т.д.
Я хотел бы поместить все это в общее пространство имен, чтобы сделать вещи немного чище, например MyCompany.Toggles.ShowNameDiv
.
Я попытался создать пространство имен
var MyCompany = {
Toggles: {}
}
И в исходном коде сделайте это:
JavaScriptRegistrar javaScriptRegistrar = GetJavaScriptRegistrar();
javaScriptRegistrar.Register("MyCompany.Toggles.ShowNameDiv", true);
Но я получаю только 'undefined'
по этой переменной. (GetJavaScriptRegistrar — это оболочка для ScriptManager).
Есть ли способ сделать то, что я пытаюсь сделать? Я делаю это неправильно? Есть ли лучшая альтернатива, которая принесет мне ту же выгоду?
Имейте в виду, что это старый код, и я не могу переписать всю страницу. Я пытаюсь выполнить дополнительный шаг, который я мог бы использовать в качестве примера, который я могу показать своим коллегам.
Комментарии:
1. Зачем вам нужно хранить данные C # в JavaScript? В зависимости от причины мы можем предложить хорошие альтернативы получению данных в javascript.
Ответ №1:
Ну, трудно понять, в чем может быть проблема, не зная, что именно делают эти фрагменты кода (особенно JavascriptRegistrar).
Возможно, одной из возможных проблем является область объявленного вами «пространства имен» javascript. Используя ключевое слово «var», вы не делаете пространство имен глобальным, оно определяется только в замыкании, в котором оно определено. Я полагаю, что код javascript, который регистрирует класс JavascriptRegistrar, ожидает глобальную переменную и не находит ни одной, поэтому он возвращает undefined
.
Вот фрагмент кода, который «раскрывает» глобально вашу переменную:
(function(window, undefined) {
var myCompany = {
Toggles: {}
};
window.MyCompany = myCompany;
})(window);