Добавление JavaScript на многие страницы (более 500) в asp.net без MasterPage

Я работаю над проектом, в котором есть более 500 страниц ASPX (всплывающие окна используют ShowModelDialog) Я хочу, чтобы подавить / отключить клавишу ввода для каждой страницы

Я хочу добавить код ниже для каждой страницы (все всплывающие окна) или для каждого запроса, сделанного пользователем. К сожалению, в проекте нет главной страницы

<script type="text/javascript">

function stopRKey(evt) {
  var evt = (evt) ? evt : ((event) ? event : null);
  var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
  if ((evt.keyCode == 13) && (node.type=="text"))  {return false;}
}

document.onkeypress = stopRKey;

</script> 

void Application_BeginRequest(object sender, EventArgs e)
    {
        //  Code that runs on application shutdown
        System.Web.UI.Page mypage = (System.Web.UI.Page)HttpContext.Current.Handler;
        if (mypage != null)
        {
            mypage.ClientScript.RegisterClientScriptBlock(GetType(), "MyScriptKey", "alert('hi')", true);
        }

    }

Я пытаюсь добавить этот скрипт в Global.asax в Application_BeginRequest но не повезло

2 ответа

Решение

Я использовал Application_PreRequestHandlerExecute событие в Global.asax файл и все заработало.

void Application_PreRequestHandlerExecute(object sender, EventArgs e)
    {
        // Code that runs when an unhandled error occurs
        HttpContext context = ((HttpApplication)sender).Context;
        Page mypage = context.CurrentHandler as Page;
        if (mypage != null)
        {

            mypage.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), @"function stopRKey(evt) {
          var evt = (evt) ? evt : ((event) ? event : null);
          var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
          if ((evt.keyCode == 13) && (node.type=='text'))  {return false;}
           }
            document.onkeypress = stopRKey; ", true);


            mypage.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), @"function validatedot(val, evt) {
            var theEvent = evt || window.event;
            var key = theEvent.keyCode || theEvent.which;
            key = String.fromCharCode(key);

            y = val.value.split(/\./);

            var regex = /[0-9]|\./;

            if (y.length > 1 && key == '.') {

                theEvent.returnValue = false;
                if (theEvent.preventDefault) theEvent.preventDefault();
            }
            if (!regex.test(key)) {

                if (theEvent.keyCode != 8 && theEvent.keyCode != 9) {
                    //alert('Enter only number');
                    //alert(theEvent.keyCode);
                    theEvent.returnValue = false;
                    if (theEvent.preventDefault) theEvent.preventDefault();
                }
            }


        }", true);
        }

    }

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

В Windows я бы использовал Notepad++. С его помощью вы можете выполнять поиск и замену в нескольких файлах в подкаталоге, фильтруя только определенные типы файлов (*.asp или *.php) и используя регулярные выражения для поиска и изменения текста:

CTRL-F, чтобы открыть диалог поиска. Перейдите на вкладку "Найти в файлах". Выберите "Каталог" и отфильтруйте соответственно. Выберите "Режим поиска" = "Регулярное выражение" и используйте

(</body>)

для поля "Найти что" и

***YOUR SCRIPT IN A SINGLE LINE HERE*** \r\n \1

для поля "Заменить на".

Обратите внимание на "\1", который используется для повторного размещения тега закрывающего тела в файле (в противном случае он будет перезаписан).

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

Другие вопросы по тегам