как передать и использовать список перечисления C # в файл Javascript и использовать в нем - PullRequest
0 голосов
/ 13 января 2019

У меня есть список классов C #,

namespace MyProject.MyEnumListClass
{
 public enum MyEnum
  {
    ValueOne,
    ValueTwo,
    ValueThree,
    ValueFour,
    ValueFive,
    ValueSix
   }
 }

И вот как я использую этот список в javascript внутри бритвы cshtml

@using MyProject.MyEnumListClass

<script>
  .....

if (type != "@((int)MyEnum.ValueThree)") 

 .....
</script>

Это легко сделать в бритве, используя бритву @ для ссылки на эти значения перечисления в коде javascript. Но сейчас, Я хочу разделить этот код javascript на файл .js, и я пытаюсь передать этот список перечислений в файл javascript и использовать его.
Каков наилучший и правильный способ использования списка C # enum внутри отдельного файла javascript?

1 Ответ

0 голосов
/ 13 января 2019

C # код выполняется на сервере. Код JS выполняется в браузере.

Вы не сможете получить ссылку на C # enum в javascript.

Лучший способ - определить объект в javascript, который имеет те же значения, что и в Enum. Затем этот объект может быть использован в вашем коде JavaScript.

Код JS будет примерно таким, как показано ниже, если вы используете чистый JavaScript:

var SizeEnum = {
  SMALL: 1,
  MEDIUM: 2,
  LARGE: 3,
};

См. эту статью , если вам нужна дополнительная информация о синтаксисе в javascript

EDIT:

Если вы не хотите явно указывать их в файлах JS, вы можете написать метод расширения , как указано в этой статье . Это преобразовало бы перечисление C # в перечисление JS. Это также поможет вам всегда синхронизировать код JS с перечислениями c #.

public static class EnumHelper
{
    public static HtmlString EnumToString<T>()
    {
        var values = Enum.GetValues(typeof(T)).Cast<int>();
        var enumDictionary = values.ToDictionary(value => Enum.GetName(typeof(T), value));
        return new HtmlString(JsonConvert.SerializeObject(enumDictionary));
    }
}

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

<script>
    var assetStatusEnum = @(EnumHelper.EnumToString<SizeEnum>())
</script>

Примечание. При этом создается объект JSON, который вы можете использовать в своем javascript. Это решение применимо, только если вы используете простой javascript. Если вы используете машинописный текст, я бы предложил использовать параллельные классы в машинописном тексте, поскольку они обеспечили бы лучшие проверки типов во время компиляции.

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