Подтвердить что ты не робот

Ошибка синтаксиса Razor для сериализации модели ASP.NET для JSON с Html.Raw

Эта строка дает мне синтаксическую ошибку в Visual Studio 2012 (буквально просто "Синтаксическая ошибка" ):

var data = @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model));

Model в этом случае является экземпляром @model MyApp.ViewModels.MyViewModel, объявленным в верхней части моего cshtml.

Моя модель правильно сериализована в данные var, и приложение работает правильно. Косметически это просто раздражает, чтобы ошибка была постоянно в моем списке ошибок.

Как мне изменить строку так, чтобы компилятор был счастлив?

изменить:

В соответствии с запросом, больше контекста. Здесь весь $(document).ready():

<script type="text/javascript">

    $(document).ready(function () {

        $('#ReportDate').datepicker();
        $('#DispositionDate').datepicker();

        var data = @Html.Raw(new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(Model));

        var vm = new NonconformingProductViewModel(data);
        ko.applyBindingsWithValidation(vm);

        // validate on page load so all reqd fields are highlighted.
        var valid = ko.validation.group(vm, {deep: true});
        valid.showAllMessages(true);

    }); // end document.ready

</script>
4b9b3361

Ответ 1

Использование функции

Внедрите простую функцию JavaScript set, которая возвращает входной аргумент:

function set(value){
    return value;
}

Используйте эту функцию для присвоения значения модели Razor переменной JavaScript:

var data = set(@Json.Encode(Model));

В качестве опции вы можете использовать функцию самозапуска:

var data = function() { return set(@Json.Encode(Model)); }();

Ответ 2

Попробуйте обернуть его в function следующим образом:

var data = function() { return @Html.Raw(Json.Encode(Model)); }();

Ответ 4

Еще проще! Это устранит это небольшое раздражение:

var model = [@Html.Raw(Json.Encode(Model))][0];

В основном intellisense хочет что-то вокруг @Html.Raw. На самом деле нет ничего плохого, но мы должны справиться с недостатком intellisense. Здесь мы объявляем результат как первый индекс нового массива, затем возвращаем первый индекс.

FYI: Если вы хотите, чтобы ваша модель отражала изменения в DOM, попробуйте класс JSModel.

Ответ 5

Вам не нужно писать какие-либо новые функции javascript, просто оберните код в скобки

var data = (@Html.Raw(Json.Encode(Model)));

работает для меня в Visual Studio 2015, не уверен в VS2012