2015年12月11日 星期五

[ASP.NET]從後台透用C#呼叫前台寫好的JavaScript function()

此文章不是如何在從*.cs中編寫一段js並到前台執行
而是在*.cs中, 使用一段前台已經寫好的js功能
此篇介紹的是作用於page內, 而非updatepanel中的js, updatepanel的請參見頁尾的msdn

假設前台(*.aspx)中有這麼一段<script>
    <script type="text/javascript">
      var optionSubjectBar = {
            'title': 'Nya~',
            'width': 200,
            'height': 300,
            vAxis: { minValue: 0 }
        };
        ...................
        function drawAxisTickColors() {
            var dataAudit = google.visualization.arrayToDataTable([
            chart.draw(dataAudit, optionAuditStackedBar);        }

        function clicktest() {
            var data = new google.visualization.DataTable();
            ...................
            chart.draw(data, optionAuditStackedBar);
        };
    </script>

在要執行該段js的C#語法中視需求插入即可
例如我想要使用「clicktest()」這個功能

(*.cs)後台
建構式為
public static void RegisterStartupScript( Page page, Type type, string keystring scriptbool addScriptTags )
  • page:一般用「Page」就對了
  • type:一般用「GetType()」就對了
  • key:給後面的指令碼有個識別值, 像是ID般的存在, 不一定要跟function相同名稱
  • script: 當然就是要執行的function了,以這個例子就是輸入「clicktest()」,要直接寫一段程式碼也是可以
  • addScriptTage:true或false, 只是會不會加上<script>...<script>而已


ScriptManager.RegisterStartupScript(Page,GetType(),"clicktest","clicktest()",true)
如果在addScriptTags用false, 那就要寫成「<script>clicktest()<script>」
通常為了避免重複一直註冊key, 會多加上判斷式
-----------------------------------------------------------------------------------------------------------------------------------------------

if (!Page.ClientScript.IsStartupScriptRegistered("clicktest"))
        {
            ScriptManager.RegisterStartupScript(Page,GetType(),"clicktest","<script>clicktest()</script>",false)
        }
-----------------------------------------------------------------------------------------------------------------------------------------------

對於單純的page也許不太需要, 但是會不斷刷新的ajax就可以節省頻寬喔

使用UpdatePanel的話,請參考這MSDN的設定:(點我前往)
另外這篇文章也不錯,說明三種註冊方法的差異(本文只使用其中一種):動態註冊JavaScript至Client端


參考資料: