2016-06-08 3 views
0

Я новичок в js и теперь пытаюсь интегрировать HTML5 AJAX File Uploader Module в свой проект ASP.NET MVC.Pass ViewBag данные для requirejs или нокаут

В моем проекте, есть ViewBag.UserID, и в представлении я использую скрипт из модуля:

<script type="text/javascript" data-main="/scripts/main" src="/Scripts/require.js"></script> 

Я полагаю, я могу передать UserID в main.js с помощью сценария выше, так что я могу использовать что-то например

var UserID; 

html5Upload.initialize({ 
    // URL that handles uploaded files 
    uploadUrl: '/file/upload?Userid=' + UserID, 

    ... 
    }); 

Но ... как я могу это сделать?

+0

Кажется, в UserId будет только одно значение, поэтому вы можете использовать Session вместо viewbag. –

+0

Вам нужен параметр для вашей функции JS, а затем просто передайте UserID в функцию JS из вашего представления. Для этого вам действительно не нужно что-то вроде Knockout. –

ответ

1

У вас может быть некоторый код начальной загрузки, чтобы интегрировать глобальные глобальные серверы в ваш javascript. Например .:

<script> 
(function(myNamespace) { 
    "use strict"; 

    myNamespace.UserInfo = { 
    UserID: '@ViewBag.UserID' // injects viewbag info into javascript 
    }; 

}(window.myNamespace = window.myNamespace || {})); 
</script> 

Теперь любой бит Javascript у вас есть доступ UserInfo свойства глобальной myNamespace переменного, которая содержит данные viewbag. Например:

uploadUrl: '/file/upload?Userid=' + myNamespace.UserInfo.UserID, 
1

@ Предложение Джереена совершенно правильно. Тем не менее, вот еще один подход, который может быть излишним для ваших целей, но вы также можете использовать его во многих других местах: SuperScript - это библиотека, которая позволяет вам объявлять, например, переменную JavaScript в серверном коде и иметь эту переменную выдает на веб-страницу вывода, как вам нравится.

Так что в вашем случае, вы могли бы что-то вроде

SuperScript.JavaScript.Declarations.AddVariable(opt => opt.EmitterKey("javascript") 
                  .Name("user_id") 
                  .Value(UserID)); 

А на ваш взгляд Razor/_layout

@SuperScript.Declarations.EmitFor("javascript") 

Что бы выписать

var user_id = "..."; // the string value of UserID 

Помимо расширяемость за это решение позволяет избежать ошибок в общих представлениях, где свойства ViewBag не являются pr esent и предлагает способ легко перемещать значения/объекты из кода в интерфейс.

Отказ от ответственности: Я один из разработчиков SuperScript.

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

  • Нет связанных вопросов^_^