Получить значения модели в отдельном файле Javascript - PullRequest
2 голосов
/ 03 апреля 2012

Я использую ASP.NET MVC 2 и застрял в ситуации, когда необходимо хранить все javascript-коды в отдельных файлах javascript.
Но на некоторых страницах Javascript содержится информация со стороны сервера, поэтому мне нужен способ сделать что-то подобное.

Я хочу создать отдельные файлы JS и включить их в Site.Master. Но все же я хочу сделать работоспособные блоки кода вроде этого

loadNews("<%= Model.A%>", "<%= Model.B%>");

Есть ли способ сделать трюк?

Ответы [ 3 ]

4 голосов
/ 03 апреля 2012

Я новичок в MVC и тоже сталкиваюсь с этой ситуацией. Я имею дело с этим, вызывая функции javascript через блок скрипта в представлении.

Примерно так:

- на MyFile.js

function loadNews(a, b) {
   //Do fun stuff
}

- в Index.cshtml

<script type="text/javascript">
   loadNews("<%= Model.A%>", "<%= Model.B%>");
</script>

Другим вариантом может быть объявление переменных в блоке сценария представления и ссылка на эти переменные в javascript, поскольку их область действия будет глобальной. Это было бы уродливо и немного сложнее в обслуживании, но также могло бы выполнять эту работу. Как это:

- на MyFile.js

function loadNews() {
   doSomethingWithA(a);
   doSomethingElseWithB(b);
}

- On Index.cshtml

<script type="text/javascript">
   var a = "<%= Model.A%>";
   var b = "<%= Model.B%>";
</script>
4 голосов
/ 31 мая 2012

У нас уже была та же проблема, и мы нашли хорошее решение, используя jQuery

Во-первых, мы расширяем jQuery своим собственным пространством имен (мы поместили следующее в отдельный файл JS и включили его в главную страницу):

$.extend({
    myProject: {            
        dataitem: {},
        dataitems: function (a) {
            $.extend($.myProject.dataitem, a);
        }
    }
});

Теперь, когда у нас есть значение, котороемы хотим перейти к нашему JS-файлу из представления ASP, мы просто добавляем в представление следующее:

<script type="text/javascript">            
        $.myProject.dataitems({   
            foo: Model.Bar,   
            bar: Model.Foo
        });
</script> 

Теперь, для вашего отдельного файла JS (который будет включен ниже упомянутого блока <script></script>) получить доступ к значению просто:

$('#foo').click(function () {
    alert($.myProject.dataitem.foo);
});
1 голос
/ 03 апреля 2012

Можете ли вы поместить данные в скрытые поля, а затем получить к ним доступ с помощью Javascript?

<%= Html.HiddenFor(x => x.A) %>

loadNews($('#A').val());

РЕДАКТИРОВАТЬ: Извините, MVC2

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