Код бритвы в коде Javascript - PullRequest
3 голосов
/ 14 ноября 2011

Код ниже не работает.

Я перепробовал все формы

@: @() @{} <text> </text>

Кажущаяся проблема заключается в{ и } в начале и в конце.(Обязательно, как и параметры)

<script type="text/javascript">

    function initializeFileUploader()
    {
        SetUploader('/Projects/ImageUpload', 'Images', true, ['jpg', 'jpeg', 'png', 'gif', 'zip'], { ProjectID: @Model.ID } );
        SetUploader('/Projects/ImageUpload', 'Logo', false, ['jpg', 'jpeg', 'png', 'gif'], { Logo: true, ProjectID: "@(Model.ID)" } );
    }
    window.onload = initializeFileUploader;

</script>

Как использовать, @Model.ID в моем JavaScript?

[Редактировать] Добавление информации

С этим кодом:

<script type="text/javascript">

    function initializeFileUploader()
    {
        SetUploader('/Projects/ImageUpload', 'Images', true, ['jpg', 'jpeg', 'png', 'gif', 'zip'], { ProjectID: @HttpUtility.JavaScriptStringEncode(Model.ID.ToString(), true) });
        SetUploader('/Projects/ImageUpload', 'Logo', false, ['jpg', 'jpeg', 'png', 'gif'], { Logo: true, ProjectID: @HttpUtility.JavaScriptStringEncode(Model.ID.ToString(), true) } );
    }

    window.onload = initializeFileUploader();

</script>

Бритва генерирует этот код:

<script type="text/javascript">

        function initializeFileUploader()
        {
            SetUploader('/Projects/ImageUpload', 'Images', true, ['jpg', 'jpeg', 'png', 'gif', 'zip'], { ProjectID: &quot;860c13af-9aa9-4667-8ee8-c5629515c71b&quot; 

</body>
</html>

[Добавить] Еще один пример кода

$('#Logo').bindAjaxUploader({
    action: '/Project/ImageUpload',
    allowedExtensions:  ['jpg', 'jpeg', 'png', 'gif'],
    params: { Logo: true, ProjectID: @HttpUtility.JavaScriptStringEncode(Model.ID.ToString(), true) }
});

Если вы установите значение вручную, все работает отлично!

$('#Logo').bindAjaxUploader({
    action: '/Project/ImageUpload',
    allowedExtensions:  ['jpg', 'jpeg', 'png', 'gif'],
    params: { Logo: true, ProjectID: "559b0505-09f2-4385-aee0-530d79c82803" }
});

[Редактировать] Разрешение

Чтобы исправить проблему, мне пришлось сделать следующее: (не элегантно)

@{
    @:function initializeFileUploader()
    @:{
            @:SetUploader('/Projects/ImageUpload', 'Images', true, ['jpg', 'jpeg', 'png', 'gif', 'zip'], { ProjectID: "@(HttpUtility.JavaScriptStringEncode(Model.ID.ToString()))" });
            @:SetUploader('/Projects/ImageUpload', 'Logo', false, ['jpg', 'jpeg', 'png', 'gif'], { Logo: true, ProjectID: "@(HttpUtility.JavaScriptStringEncode(Model.ID.ToString()))" });
        @:}

    @:window.onload = initializeFileUploader;
}

Ответы [ 3 ]

1 голос
/ 14 ноября 2011

Попробуйте поместить @ Model.ID в одинарные кавычки '@ Model.ID'.Это всегда работает для меня.

Вот код:

function initializeFileUploader()
{
    SetUploader('/Projects/ImageUpload', 'Images', true, ['jpg', 'jpeg', 'png', 'gif', 'zip'], { ProjectID: '@Model.ID' });
    SetUploader('/Projects/ImageUpload', 'Logo', false, ['jpg', 'jpeg', 'png', 'gif'], { Logo: true, ProjectID: '@Model.ID' });
}

window.onload = initializeFileUploader;
1 голос
/ 14 ноября 2011
window.onload = initializeFileUploader();

Это сразу выполняет initializeFileUploader (), ДО фактического вызова window.onload, оно должно быть

window.onload = initializeFileUploader;
0 голосов
/ 14 ноября 2011

Оба ваших примера кода должны работать нормально.

Мои экстрасенсорные способности говорят мне, что Model.ID - это строка, поэтому вы в конечном итоге записываете строковое значение в Javascript без кавычек. Поэтому он обрабатывается как имя переменной, а не как значение.
Вместо этого вызовите @HttpUtility.JavaScriptStringEncode(Model.ID, true) для вывода правильно экранированного строкового литерала.

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