C # asp.net WebForm добавить JS и запустить его из кода позади - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть WebForm Html:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GetLink.aspx.cs" Inherits="GetLink" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <input type="hidden" runat="server" id="hdnVal" value="55"/>

    </div>
    </form>
</body>
</html>

И я хочу добавить к этому коду функцию JavaScript и запустить ее с этим кодом:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!ClientScript.IsStartupScriptRegistered("key1"))
        {
            ClientScript.RegisterStartupScript(GetType(), "key1", @"<script type=""text/javascript"">function callMyJSFunction() { document.getElementById(""hdnVal"").value='5'; }</script>");
        }

        ClientScript.RegisterStartupScript(this.GetType(), "key1", "<script>callMyJSFunction();</script>");

        string resutOfExecuteJavaScript = hdnVal.Value;
    }

Когда я запускаю его, значение hdnVal сохраняет значение 55 и не изменяется.Есть идеи, в чем проблема?

Ответы [ 2 ]

0 голосов
/ 02 января 2019

Ваш код в событии Page_Load должен вызывать ClientScript.RegisterClientScriptBlock при регистрации функции JavaScript callMyJSFunction , тогда как в вашем коде вы регистрируете эту функцию в качестве сценария запуска.Это единственная ошибка в вашем коде.

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

protected void Page_Load(object sender, EventArgs e)
{
    if (!ClientScript.IsClientScriptBlockRegistered("key1"))
    {
        //register your javascript function
        ClientScript.RegisterClientScriptBlock(GetType(), "key1", @"<script type=""text/javascript"">function callMyJSFunction() { document.getElementById(""hdnVal"").value='5'; }</script>");
    }

    ClientScript.RegisterStartupScript(this.GetType(), "key1", "<script>callMyJSFunction();</script>");

    string resutOfExecuteJavaScript = hdnVal.Value;
}
0 голосов
/ 31 декабря 2018

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

Это сработало для меня

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script>
      $('document').ready()
      {
          function callMyJSFunction()
          {
              debugger;
              document.getElementById('hdnVal').value = '5';
 alert(document.getElementById('hdnVal').value);
          }
          // - including fonts, images, etc.
      }
   </script>

</head>
<body>
    <form id="form1" runat="server">
    <div>
     <input type="hidden" runat="server" id="hdnVal" value="55"/>
        <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
    </div>
    </form>
</body>
</html>

и на странице cs

  protected void Button1_Click(object sender, EventArgs e)
    {


        ClientScript.RegisterStartupScript(this.GetType(), "key1", "<script>callMyJSFunction()</script>",false);

        string resutOfExecuteJavaScript = hdnVal.Value;
    }

enter image description here

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