Сохранение файла js с помощью команд c # - PullRequest
4 голосов
/ 27 марта 2010
    <head runat="server">
        <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>
        <link href="../../Content/css/layout.css" rel="stylesheet" type="text/css" />    
        <script type="text/javascript" src="/Areas/CMS/Content/js/jquery-1.3.2.min.js"></script>    
        <script type="text/javascript" src="/Areas/CMS/Content/js/jquery.jeditable.js"></script>
        <script type="text/javascript" src="/Areas/CMS/Content/js/jeditable.js"></script> 

        <script type="text/javascript">
            $(document).ready(function() {
                $(".naslov_vijesti").editable('<%=Url.Action("UpdateSettings","Article") %>', {
                       submit: 'ok', 
                       submitdata: {field: "Title"},  
                       cancel: 'cancel',   
                       cssclass: 'editable',   
                       width: '99%',   
                       placeholder: 'emtpy',   
                       indicator: "<img src='../../Content/img/indicator.gif'/>"  
                });
            }); 
        </script>      
</head>

Это заголовок файла site.master.Я хотел бы удалить эту многострочную часть из головы и поместить ее в файл jeditable.js, который сейчас пуст.Если я сделаю копирование / вставку, то <% %> часть не будет выполнена.В PHP я бы сохранил файл js как jeditable.js.php, а сервер скомпилировал бы код в теге <?php ?>Есть идеи, как решить эту проблему?

Заранее спасибо,
Иль

Ответы [ 4 ]

4 голосов
/ 27 марта 2010

В PHP я бы сохранил файл js как jeditable.js.php, а сервер скомпилировал бы код в теге.

Здесь нужно иметь в виду, что php теперь вынужден обрабатывать весь этот файл javascript при каждом запросе. Обычно это «плохая вещь» TM , и она использует ресурсы сервера, которые могут быть потрачены в другом месте.

Как уже упоминался в ответе Радж Кимал, то, что мы делаем в ASP.Net для максимально эффективного решения этой проблемы, - это создание короткого сценария, определенного внутри страницы, который ничего не делает, кроме как присваивает результат кода сервера переменным. Сделайте это до объявления других сценариев, и затем вы сможете напрямую использовать эти переменные в этих сценариях. Таким образом, вам не нужно выполнять любую дополнительную работу сервера для ваших внешних файлов JavaScript.

Я сделаю одно дополнение к ответу мистера Кимала. Часто лучше поместить эти переменные в объект, чтобы избежать коллизий имен. Примерно так:

<head runat="server">
    <script language="javascript">
       var ServerCreated = {
          ArticleAction:'<%=Url.Action("UpdateSettings","Article") %>',
          OtherVar:'some server data'
       }
    </script>
</head>

Тогда ваш файл jeditable.js будет выглядеть так:

$(document).ready(function() {
            $(".naslov_vijesti").editable(ServerCreated.ArticleAction, {
                   submit: 'ok', 
                   submitdata: {field: "Title"},  
                   cancel: 'cancel',   
                   cssclass: 'editable',   
                   width: '99%',   
                   placeholder: 'emtpy',   
                   indicator: "<img src='../../Content/img/indicator.gif'/>"  
            });
        }); 
2 голосов
/ 27 марта 2010

Вы можете поместить скрипт в файл .aspx и установить тип контента на text/javascript в директиве @page. Вы по-прежнему сможете использовать теги кода.

Стоимость обработки всего файла javascript для каждого запроса может быть легко уменьшена путем применения кэширования на стороне сервера, поэтому проблем не должно быть. Это также можно настроить в директиве @page.

2 голосов
/ 27 марта 2010

Определите вашу переменную часть как переменную js.

var foo = '<% = Url.Action ("UpdateSettings", "Article")%>'; и поместите его перед ссылкой js. Затем используйте переменную в вашем файле js.

1 голос
/ 27 марта 2010

У вас есть несколько вариантов, но главное здесь в том, что если вам нужно использовать синтаксис <%%> для получения информации, вам нужно быть в контексте страницы ASP.NET.

Вы можете «переместить» фактическую функцию во внешний файл и сослаться на JS, а затем добавить небольшой встроенный блок сценария, который вызывает функцию с двумя параметрами, но это противоречит цели того, что вы хотите.

Реальный вопрос здесь, почему накладные расходы на дополнительный HTTP-запрос для одного метода?

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