У меня есть следующая модель, которая обернута в мою модель зрения
public class FloorPlanSettingsModel
{
public int Id { get; set; }
public int? MainFloorPlanId { get; set; }
public string ImageDirectory { get; set; }
public string ThumbnailDirectory { get; set; }
public string IconsDirectory { get; set; }
}
Как получить доступ к одному из вышеуказанных свойств из Javascript?
Я пытался это, но я получил "неопределенный"
var floorplanSettings = "@Model.FloorPlanSettings";
alert(floorplanSettings.IconsDirectory);
c#
javascript
jquery
asp.net-mvc
model
Нулевая ссылка
источник
источник
Ответы:
Вы можете взять всю свою серверную модель и превратить ее в объект Javascript, выполнив следующие действия:
В вашем случае, если вы просто хотите получить объект FloorPlanSettings, просто передайте
Encode
метод этому свойству:источник
Как получить доступ к данным модели в блоке кода Javascript / Jquery в
.cshtml
файлеСуществует два типа
Model
присвоения переменной c # ( ) переменной JavaScript.int
,string
,DateTime
(например:Model.Name
)Model
,Model.UserSettingsObj
)Давайте посмотрим на детали этих двух заданий.
Для остальной части ответа рассмотрим приведенную ниже
AppUser
модель в качестве примера.И значения, которые мы присваиваем этой модели:
Передача имущества
Давайте использовать другой синтаксис для присваивания и наблюдать за результатами.
1) Без переноса свойства в кавычки.
Как вы можете видеть, есть несколько ошибок,
Raj
и ониTrue
считаются переменными javascript, и, поскольку они не существуют, этоvariable undefined
ошибка. Если для переменной dateTime ошибка состоит в том, чтоunexpected number
числа не могут иметь специальных символов, теги HTML преобразуются в имена объектов, чтобы браузер не смешивал ваши значения и разметку HTML.2) Завершение присваивания свойств в кавычках.
Результаты действительны, поэтому перенос свойства в кавычки дает нам правильный синтаксис. Но обратите внимание, что Number
Age
теперь является строкой, поэтому, если вы не хотите, мы можем просто удалить кавычки, и он будет отображаться как числовой тип.3) Использование
@Html.Raw
без кавычек в кавычкахРезультаты аналогичны наш тест 1. Однако при использовании
@Html.Raw()
наHTML
строке были показать нам некоторые изменения. HTML-код сохраняется без изменения имен его сущностей.Из документов Html.Raw ()
Но все же у нас есть ошибки в других строках.
4) Использование,
@Html.Raw
а также упаковка в кавычкиРезультаты хороши для всех типов. Но наши
HTML
данные теперь сломаны, и это сломает сценарии. Проблема заключается в том, что мы используем одинарные кавычки,'
чтобы обернуть данные, и даже данные имеют одинарные кавычки.Мы можем преодолеть эту проблему с 2 подходами.
1) использовать двойные кавычки
" "
для переноса части HTML. Поскольку внутренние данные имеют только одинарные кавычки. (Убедитесь, что после переноса в двойные кавычки"
внутри данных тоже нет)2) Избегайте значения символов в вашем коде на стороне сервера. подобно
Заключение о передаче имущества
Html.Raw
для интерпретации ваших HTML-данных как есть.Назначение объекта
Давайте использовать другой синтаксис для присваивания и наблюдать за результатами.
1) Без переноса объекта в кавычки.
Когда вы присваиваете объект ac # переменной javascript
.ToString()
, будет назначено значение этого объекта. Отсюда и вышеприведенный результат.2 Заключение объекта в кавычки
3) Использование
Html.Raw
без кавычек.4) Использование
Html.Raw
вместе с цитатамиHtml.Raw
Был не много пользы для нас в то время как назначение объекта к переменной.5) Использование
Json.Encode()
без кавычекМы видим некоторые изменения, мы видим, что наша Модель интерпретируется как объект. Но мы изменили эти специальные символы
entity names
. Кроме того, упаковка приведенного выше синтаксиса в кавычки бесполезна. Мы просто получаем тот же результат в кавычках.Из документов Json.Encode ()
Поскольку вы уже сталкивались с этой
entity Name
проблемой при назначении свойств, и, если вы помните, мы преодолели ее с помощьюHtml.Raw
. Итак, давайте попробуем это. Позволяет объединитьHtml.Raw
иJson.Encode
6) Использование
Html.Raw
иJson.Encode
без кавычек.Результат является допустимым объектом Javascript
7) Использование
Html.Raw
иJson.Encode
в кавычках.Как вы видите, упаковка с кавычками дает нам данные JSON
Заключение о назначении объекта
Html.Raw
иJson.Encode
в сочетании, чтобы назначить свой объект переменной javascript как объект JavaScript .Html.Raw
аJson.Encode
также оберните его внутри,quotes
чтобы получить JSONПримечание. Если вы заметили, что формат данных DataTime неверен. Это потому, что, как было сказано ранее,
Converts a data object to a string that is in the JavaScript Object Notation (JSON) format
JSON не содержитdate
тип. Другие варианты , чтобы исправить это , чтобы добавить еще одну строку кода для обработки этого типа в одиночку , используя Javascipt Дата) ( объектКак получить доступ к данным модели в блоке кода Javascript / Jquery в
.js
файлеСинтаксис Razor не имеет значения в
.js
файле, и, следовательно, мы не можем напрямую использовать нашу модель в.js
файле. Однако есть обходной путь.1) Решение использует глобальные переменные javascript .
Мы должны присвоить значение глобальной переменной javascipt в области видимости, а затем использовать эту переменную во всем блоке кода вашего
.cshtml
и.js
файлов. Таким образом, синтаксис будетИмея это в виду, мы можем использовать переменные
userObj
и поuserJsonObj
мере необходимости.Примечание: я лично не предлагаю использовать глобальные переменные, так как это очень сложно для поддержки. Однако, если у вас нет другого выбора, вы можете использовать его с соответствующим соглашением об именах ... что-то вроде
userAppDetails_global
.2) Используя функцию () или
closure
Wrap весь код, который зависит от данных модели в функции. И затем выполните эту функцию из.cshtml
файла.external.js
.cshtml
файлПримечание: Ваш внешний файл должен быть указан до сценария выше. В противном случае
userDataDependent
функция не определена.Также обратите внимание, что функция также должна находиться в глобальной области видимости. Таким образом, любое решение нам приходится иметь дело с глобальными игроками.
источник
var model = @Html.Raw(Json.Encode(Model));
это создаст объект javascript,model
который не имеет никакого отношения к C # Model, которую вы передаете представлению. Infact не будетModel
после того, как представление было предоставлено. Таким образом, форма в пользовательском интерфейсе не будет иметь никакого представления об изменениях данных объекта javascript. Теперь вам нужно передать всю эту измененную модель в контроллер через AJAX, или вам нужно обновить значение ваших элементов управления вводом с помощью формы, используя javascript.Although I did the same thing using hidden Html control and bound it to EventCommand and updated it's value in javascript. But wondering if could do same directly to model?
для этого утверждения ..EventCommand
в MVC нет, это для Webforms, где есть связь между пользовательским интерфейсом и действиями сервера, в MVC все это разделено. Единственный способ для вас взаимодействовать с контроллером - через AJAX илипопробуйте это: (вы пропустили одинарные кавычки)
источник
JSON
без кавычек дает вамjavascript Object
. Проверьте мой ответ в той же теме для более подробной информации. stackoverflow.com/a/41312348/2592042Обертывание свойства модели вокруг паренов работало на меня. Вы все еще получаете ту же проблему с Visual Studio, жалуясь на точку с запятой, но это работает.
источник
Если возникает ошибка «ReferenceError: Модель не определена» , вы можете попробовать использовать следующий метод:
Надеюсь это поможет...
источник
Я знаю, что уже слишком поздно, но это решение отлично работает как для .net framework, так и для ядра .net:
@ System.Web.HttpUtility.JavaScriptStringEncode ()
источник