2015-11-16 3 views
1

В какой-то момент у меня не было никаких проблем для сбора сырой модели по телефону:ASP.NET: недопустимый символ «@» в «@ Html.Raw» называют

@Html.Raw(Json.Encode(Model)); 

, но теперь я получаю эту ошибку :

Uncaught SyntaxError: Unexpected toke ILLEGAL 

в Chrome и IE, и это указывает прямо на этот символ '@'

Я это (как это было предложено в другой StackOverflow должности):

и это (также предложил в другой StackOverflow должности):

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

и ничего, кажется, работает.

Все, что я хочу сделать, это передать некоторые измененные данные модели с сервера на клиент, чтобы я мог реагировать на изменяющиеся данные модели.

Любые предложения?

+0

'@ (Html.Raw (Json.Encode (модель)))' – vcsjones

+2

I не работали с бритвой широко, но я обычно делаю '@ {}' для операторов блока, '@()' кажется немного странным для меня .. для пояснения этот фрагмент находится на странице 'cshtml' или' vbhtml' который обрабатывается, правильно? –

+0

В каком файле это делается? cshtml? –

ответ

2

Вы всегда можете попробовать перенести свой скрипт из файла .js и поместить его в частичный вид.

использовать динамический тип вашей модели и сделать код частичного просмотра примерно таким.

@model dynamic 
<script type="text/javascript"> 
    var getRawLayoutData = function() { return @Html.Raw(Json.Encode(Model)); } 
    var rawModelData = getRawLayoutData(); 
</script> 

Тогда, когда вы загружаете файл JavaScript на главной странице, просто использовать это вместо

@Html.Partial("_Scipt", Model) 
0

Попробуйте заменить его на @(Html.Raw(Json.Encode(Model)));. Это должно решить вашу проблему. Оглядываясь назад на мои проекты, это синтаксис, который я использую, и это не дает мне никаких проблем.

+0

hey @jgabb, я думаю, что еще слишком рано говорить о том, была ли эта проблема вообще. Тем не менее, ваше предложение будет работать при нормальных обстоятельствах. –

+0

это не сработало, это потому, что я в файле .js ? – kformeck

+1

Да. Это причина. – jgabb

1

Код бритвы работает только в файлах cshtml или vbhtml. JS-файлы не предварительно обрабатываются Razor. Поэтому вы просто отправили код Razor прямо в браузер как JS (недействительный JS). За исключением простого сброса всего кода JS в представление, вы можете просто установить переменную в поле зрения, а затем получить доступ к ней во внешнем JS-файле. Однако я предлагаю использовать пространство имен, поэтому вы не будете загрязнять глобальное пространство имен и столкновения с рисками с другим кодом JavaScript.

Посмотреть

<script> 
    var MyNamespace = MyNamespace || {}; 
    MyNamespace.RawModelData = @Html.Raw(Json.Encode(Model)); 
</script> 
<script src="/path/to/external.js"></script> 

Тогда в ваших внешних JS, вы можете ссылаться на MyNamespace.RawModelData по мере необходимости.

Смежные вопросы