ASP.NET: можете ли вы использовать серверные теги для встраивания выражений C # или VB.NET в функцию Javascript? - PullRequest
1 голос
/ 26 октября 2011

У меня есть перечисление SiteTypes, которое содержит несколько значений, которые все связаны с выпадающим списком. На стороне клиента мне нужно проверить это раскрывающееся меню, чтобы увидеть, является ли выбранное значение одним из перечисленных значений. Я не хочу жестко кодировать значение перечисления в скрипте на случай, если его нужно изменить, поэтому я хочу использовать тег сервера, чтобы получить его непосредственно из самого перечисления. В принципе, я хотел бы сделать это:

function SiteIdChanged() {
    var x = "<%=SiteTypes.Employee %>";
}

То, как я сейчас это делаю, создает в codebehind защищенное свойство, которое возвращает конкретное значение перечисления и делает следующее:

function SiteIdChanged() {
    var x = "<%=EmployeeSiteTypeValue %>";
}

Мне это не нравится, потому что мне нужно создавать специальное свойство на каждой странице, для которого мне нужна такая проверка.

Есть ли способ сделать то, что я хочу здесь?

Ответы [ 4 ]

2 голосов
/ 27 октября 2011

Получаете ли вы сообщение об ошибке «xxx недоступен из-за уровня защиты» при компиляции или запуске страницы?Перечисления общедоступны по умолчанию, классы - нет.Я предполагаю, что вы определили свой enum внутри класса вашей страницы и не помечаете его явно как публичный модификатор доступа.Явно пометьте его как открытый или переместите за пределы класса и посмотрите, что произойдет.Если вы планируете использовать его на многих страницах, вставьте определение перечисления в файл в папке App_Code вашего проекта.

2 голосов
/ 26 октября 2011

Если вам не нравится ваша текущая реализация, я бы подумал об использовании PageMethod для сравнения выпадающего списка со значением enum. Этот подход, вероятно, будет чище, поскольку вы можете выполнять большую часть логики на стороне сервера.

Вот учебник по PageMethods:
http://blogs.microsoft.co.il/blogs/gilf/archive/2008/10/04/asp-net-ajax-pagemethods.aspx

2 голосов
/ 26 октября 2011

Пока ваш enum помечен public, вы можете просто выбрать первый вариант.Нет необходимости помещать свойство на каждую страницу, с которой вы хотите получить значение.

Этот подход действительно является самым простым решением для записи значений на стороне сервера в вашем JavaScript.

0 голосов
/ 26 октября 2011

Вы можете использовать метод Enum.

...