2011-10-18 103 views
-2

所以这看起来很有名,但有点不同。从服务器端调用JavaScript函数?

JavaScript函数:

function ShowMessage(Message, Title, isAlarm) { 
     $("#dtext").html(Message); 
     $("span.ui-dialog-title").text(Title); 
     $("#dialog").dialog({ 
      open: function(e) { 
       var Dia = $(e.target); 
       if (isAlarm == true) { 
        Dia.parents(".ui-dialog:first").find(".ui-dialog-titlebar").css("background", "red"); 
        Dia.parents(".ui-dialog:first").find(".ui-dialog-titlebar").css("color", "White"); 
       } 
       else { 
        Dia.parents(".ui-dialog:first").find(".ui-dialog-titlebar").css("background", "LightSeaGreen"); 
        Dia.parents(".ui-dialog:first").find(".ui-dialog-titlebar").css("color", "White"); 
       } 
      }, 
      show: "blind", 
      hide: "clip", 
      modal: true, 
      resizable: false, 
      buttons: { 
       "Close": function(e) { 
        $(this).dialog("close"); 
        return true; 
       } 
      } 
     }); 
    } 

正如你看到的这个方法填充jQuery的代码。如果这只是java脚本,我们可以使用此代码来调用该函数,但在这种情况下,此方法效果不佳。

C#调用JS方法:

if (!Pointer.ClientScript.IsStartupScriptRegistered("message")) 
     Pointer.Page.ClientScript.RegisterStartupScript 
      (Pointer.Master.GetType(), "message", "ShowMessage('messageBox','" + Message + "',false);", true); 

我不知道如何解决这个问题。 I Want just call this Js function from server-side?

编辑1

感谢您的关注。有些人想从我这里更好地描述我的问题。为什么我不能? Cuz I don't know what's exactly problem

我可以说,我测试这个程序使用Firebug和对JS的功能,但在运行时,第一行设置断点,当我将其称为是突破点Hit几毫秒和JS函数,那么页面重载云完成并没有发生。

我是JS和jQuery的新手。所以反而打倒投票plz 尝试这些代码的示例程序,并帮助我

再次感谢(特别斯特凡,PirateKitten,Widor)

编辑2

我做了这个Function(JQuery Message Function)更换Old Function只使用简单的JS警报。我必须说旧版本的工作(即使我从服务器端调用JS编写的调用函数)。

在这种情况下

,即使I call new Function(JQ Function) with Js页面,如:

<button type="button" onclick="ShowMessage('hi','title',false)"> 
    Display Message 
</button> 

它的工作,但when call that from server side, Function don't work

+2

它可能是早期调用函数?这个改变是否工作? 'Pointer.Page.ClientScript.RegisterStartupScript(Pointer.Master.GetType(),“message”,“$(function(){ShowMessage('messageBox',”+ Message +“',false);}”,true); ' –

+1

你应该添加你确切的问题是什么JS错误?服务器错误?等 – Stefan

+0

你说过“工作不好”,你的意思是什么?你的JavaScript没有正确渲染,你看过吗?看看你是否有任何JS错误? – Kasaku

回答

2

简单地说;你不能。

JavaScript运行客户端,C#运行服务器端。

但是,您可以生成 JavaScript serverside并将其输出到客户端。

见我的答案在这里:与Page.ClientScript.RegisterStartupScript注册的“渲染”,在页面的最后Call javascript from vb.net code behind

+0

我这样做,作为示例我在函数中使用简单的警报,并从该调用方法后面的代码中调用该函数。 – Rev

1

代码。准确地在form关闭标记之前的script标记中。但是,代码可能在DOM树完全生成之前运行。

由于您的ShowMessage函数访问DOM树,因此您的问题可能与丢失DOM树元素有关。

如果我正确解释你的问题,那么页面上没有JS错误。这chould是因为jQuery选择行为的结果:

$("#dtext").html(Message); 

这将设置所有元素的HTML与ID DTEXT。由于ID dtext可能没有元素,因此$("#dtext")将返回一个空集合并且不采取任何操作。

要解决此问题,您可以尝试在jquery文档就绪事件中运行代码。 jQuery的触发这个事件,如果是完全载入网页:

$(document).ready(function() { ShowMessage('messageBox','" + Message + "', false); } 

ServerCode:

if (!Pointer.ClientScript.IsStartupScriptRegistered("message")) 
     Pointer.Page.ClientScript.RegisterStartupScript 
      (Pointer.Master.GetType(), "message", "$(document).ready(function() {ShowMessage('messageBox','" + Message + "',false); }", true); 
+0

反映了问题的变化。 – Stefan

+0

你的解决方案没有工作,但+1指向Dom树和使用JQuery事件 – Rev

+0

@Rev:你应该尝试给你一个更好的解释你的问题。什么是不工作。 “但在这种情况下,这种方法效果不佳。”是一个相当温和的问题描述。这就是为什么你的答案有三个downvotes ... – Stefan

-1

你可以调用JS功能从服务器端这样

Page.ClientScript.RegisterStartupScript(this.GetType(), "show", "ShowMessage()",true); 

希望这将有助于你

+0

PLZ看看我的问题,这不是解决方案 – Rev

相关问题