вызов функции javascript из inlinecode aspx

#javascript #asp.net #inline-code

#javascript #asp.net #встроенный код

Вопрос:

У меня есть рабочий код, вставленный ниже, который имеет функцию FormatStatus() как часть встроенного кода, а фактическое определение находится в коде (C #). Мой вопрос в том, если я перемещу функцию (FormatStatus()) во внешний файл javascript, как я могу вызвать ее из встроенного кода.

  <asp:Label ID="lblSts" runat="server" Text= '<%# FormatStatus(Eval("StsId").ToString()) %>' >                                        
          </asp:Label>
  

Мой код, лежащий в основе :

     protected string FormatStatus(string Id)
    {
        string formatText = string.Empty;

        switch (int.Parse(Id))
        {
            case 0:
                formatText = "New";
                break;
            case 1:
                formatText = "Old";
                break;
          ..... 
        }

        return formatText;
    }
  

Ответ №1:

Функция JavaScript может быть вызвана только любым событием. Если вы хотите запустить js-функцию в качестве начального метода, вы можете использовать window.onload . Итак, вы можете создать глобальный массив javascript на своей странице и заполнить его значениями идентификаторов из c # за кодом и вызвать formatStatus в window.load:

 if (!Page.ClientScript.IsStartupScriptRegistered("preloadArray"   this.ClientID))
{
      string script = "<script type='text/javascript'> ";
      for (int i = 0; i < ...; i  )
      {
           script  = "arr.push(" i.ToString() ");";
      }
      script  = "formatStatus('"   gvAdminActiveAsgnments.ClientID   "');";            
      script  = "</script>";

      Page.ClientScript.RegisterStartupScript(this.GetType(),
            "preloadArray"   this.ClientID, script);
 }
  

(вы можете использовать обработчик Page_Load или ItemDataBound)

Затем вы должны написать функцию, которая принимает один аргумент с идентификатором grid:

 function formatStatus(id){
 var table = document.getElementById(id);
 var rows = table.getElementsByTag('TR');
 for(var i=0; i<rows.length;i  ){
   //puts into label from table row result for arr[i]
 }
}
  

Она будет вызвана при загрузке страницы для вашей таблицы, которая будет отображаться из asp: GridView. Вы можете привязать formatStatus к любому событию, например, нажать на какую-либо кнопку. Таким образом, это изменит метки.

Ответ №2:

Вы можете попробовать сделать это таким образом, просто убедитесь, что внешний js-файл включен поверх документа.

  <asp:Label ID="lblSts" runat="server">
      <script type="text/javascript">
            document.write(FormatStatus('<%# Eval("StsId").ToString() %>');
      </script>                                       
 </asp:Label>