Як користуватися Razor, як зробити булеву змінну JavaScript?


144

Як зробити реле булевої змінної JavaScript у файлі cshtml?

Наразі це показує синтаксичну помилку:

<script type="text/javascript" >

    var myViewModel = {
        isFollowing: @Model.IsFollowing  // This is a C# bool
    };
</script>

@ не є дійсним оператором JS. Це означає, що воно може відбуватися лише в рядках
Іван Кукір

це питання змушує мене відчувати себе старим
Нікос

Я не знаю, що таке T #, тому я припустив, що це означало C # @Nikos;)
Мафій

ваш коментар не має сенсу
Нікос

Нічого цього Кві насправді натрапив на Реп
Нікос

Відповіді:


298

Ви також можете спробувати:

isFollowing: '@(Model.IsFollowing)' === '@true'

і все кращим способом є використання:

isFollowing: @Json.Encode(Model.IsFollowing)

63
@Json.Encode(Model.IsFollowing)це найелегантніше рішення. Дякую!
Сандро

2
Зазвичай тут буде використовуватися більше одного булевого типу, в цьому випадку кодування всієї моделі робить речі приємними та легкими у використанні після цього. наприклад: var model = @ Html.Raw (Json.Encode (модель)); і тоді ви можете просто зателефонувати на модель.IsFollowing (Вибачте, я не знаю, як правильно відформатувати код коментаря)
Jynn

Додати, @using System.Web.Helpersщоб заповнити код.
taylorswiftfan

29

Булевий JSON повинен бути малі.

Тому спробуйте це (і переконайтесь, що не маєте //коментаря в рядку):

var myViewModel = {
    isFollowing: @Model.IsFollowing.ToString().ToLower()
};

Або (зверніть увагу: потрібно використовувати простір імен System.Xml):

var myViewModel = {
    isFollowing: @XmlConvert.ToString(Model.IsFollowing)
};

1
Підхід .ToString (), мабуть, є найбільш ефективним. Використання "@ Model.IsFollowing.ToString (). ToLowerInvariant ()" повинно бути трохи ефективнішим і дещо більш простим.
XDS

Використання методу, для наведення рядків і опускання, безумовно, є найчистішим у моєму варіанті, оскільки він чітко читає у JavaScript.
Френк Томас

28

Оскільки пошук привів мене сюди: в ASP.NET Core IJsonHelperнемає Encode()методу. Натомість використовуйте Serialize(). Наприклад:

isFollowing: @Json.Serialize(Model.IsFollowing)    

3
Дякуємо, що згадали про основу asp.net!
Шаріф Мамун

13
var myViewModel = {
    isFollowing: '@(Model.IsFollowing)' == "True";
};

Чому Trueі ні trueви не задаєте ... Добре запитання:
Чому Boolean.ToString виводить "True", а не "true"


Не сумніватися, але чи кодування @Model.IsFollowingфактично дійсного синтаксису JS? Або покладається на те, що це буде тому, що воно буває булевим?
gahooa

@ Model.IsFollowing - синтаксис бритви, а не js
Нікос

@gahooa, ні, це не так, він розбирається на сервері за допомогою двигуна Razor.
gdoron підтримує Моніку

@Nikos, тоді спробуйте:'@(Model.IsFollowing)'
gdoron підтримує Моніку

@Nikos, ти намагався запустити його? багато разів це лише випуск Visual Studio, але він працює чудово. Спробуйте запустити його!
gdoron підтримує Моніку

4

Ось ще один варіант, який слід розглянути, використовуючи !! перетворення на булеву.

isFollowing: !!(@Model.IsFollowing ? 1 : 0)

Це призведе до створення наступного на стороні клієнта, 1 перетворюється на істинне, а 0 - на хибне.

isFollowing: !!(1)  -- or !!(0)

незначна корекція !! @ (Model.IsFollowing? 1: 0) чудово працює
курятина

3

Простіше прочитати рішення: це зробити:

isFollowing: @(Model.IsFollowing ? "true" : "false")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.