Подтвердить что ты не робот

Внедрить Javascript из кода asp.net за файлами

Я правильно вставляю это,

        string myScriptName = "EventScriptBlock";
        string myScript = string.Empty;

        //Verify script isn't already registered
        if (!ClientScript.IsClientScriptBlockRegistered(myScriptName))
        {
            Response.Write('b');
            myScript = "\n<script type=\"text/javascript\" language=\"Javascript\" id=\"EventScriptBlock\">\n";
            myScript += "alert('hi');";
            myScript += "\n\n </script>";

            ClientScript.RegisterClientScriptBlock(this.GetType(), myScriptName, myScript);
        }

Это в моей загрузке страницы, но я никогда не вижу предупреждения, и у меня также нет ошибок Javascript.

4b9b3361

Ответ 1

Вы можете использовать registerstartupscript вместо registerclientscriptblock!

RegisterStartupScript Когда вы используете RegisterStartupScript, он будет отображать ваш script после всех элементов на странице (прямо перед тегом конца формы). Это позволяет script вызывать или ссылаться на элементы страницы без возможности их нахождения на странице DOM

RegisterClientScriptBlock Когда вы используете RegisterClientScriptBlock, script отображается сразу после тега Viewstate, но перед любым элементом страницы. Поскольку это прямой script (а не функция, которая может быть вызвана, она будет немедленно выполнена браузером. Но на этом этапе браузер не находит метку на странице DOM, и поэтому вы должны получить "Object not found" error

Разница между registerstartupscript и registerclientscriptblock

protected void Page_Load(object sender, System.EventArgs e)
 {
      string myScript = "\n<script type=\"text/javascript\" language=\"Javascript\" id=\"EventScriptBlock\">\n";
        myScript += "alert('hi');";
        myScript += "\n\n </script>";
     Page.ClientScript.RegisterStartupScript(this.GetType(), "myKey", myScript, false);
 }

Ответ 2

У меня такое чувство, что это связано с вашей разметкой asp.net/html.

Есть ли у вас такой тег формы в вашем .aspx файле?

<form id="form1" runat="server">
   ....
</form>

Ответ 3

Оба RegisterStartupScript и RegisterClientScriptBlock будут работать.

Проблема заключается в myScript (строковая переменная). В переменной myScript вам нужно использовать только предупреждающую переменную, так как всякий раз, когда вы используете это, тег script будет добавлен автоматически на ваш HTML-код страницы во время выполнения. Чтобы проверить это право на своей странице и посмотреть источник страницы.

protected void Page_Load(object sender, EventArgs e)
{
        string myScript = string.Empty;

        //myScript = "\n<script type=\"text/javascript\" language=\"Javascript\" id=\"EventScriptBlock\">\n";
        string registerKey = "alert('RegisterClientScriptBlock');";
        myScript = "alert('RegisterStartupScript');";
        Page.ClientScript.RegisterStartupScript(this.GetType(), "RegisterStartupScript", myScript, true);
        Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "RegisterClientScriptBlock", registerKey, true);
    }

Примечание. Я выполнил RegisterStartupScript, а затем RegisterClientScriptBlock. Но оповещение RegisterStartupScript будет выполнено последним, так как оно будет добавлено в конец страницы. RegisterClientScriptBlock всегда будет добавлен в начале страницы.