【问题标题】:Calling JavaScript function from server-side?从服务器端调用 JavaScript 函数?
【发布时间】:2011-12-09 20:59:55
【问题描述】:

所以这看起来很有名,但几乎没有什么不同。

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-Code 填充。如果这只是 java-script,我们可以使用此代码来调用该函数,但在这种情况下,此方法不能正常工作。

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

感谢您的关注。有些人希望我能更好地描述我的问题。为什么我不能? 因为I don't know what's exactly problem.

我只能说,我用 FireBug 测试这个程序并在 JS 函数的第一行设置断点,但是在运行时,当我调用那个 Js 函数时,断点 Hit 几毫秒,然后页面重新加载完成,什么也没发生。

我是 JS 和 jQuery 的新手。因此,请不要投票尝试使用这些代码的示例程序并帮助我

再次感谢(特别是 Stefan、PirateKitten、Widor)

编辑 2

我制作了这个Function(JQuery Message Function) 来替换只使用简单 JS 警报的 Old Function。我必须说旧版本的工作(即使我用我写的 JS-Caller-Function 从服务器端调用它)。

在这种情况下,即使 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

【问题讨论】:

  • 会不会是函数被提前调用了?这种改变有效吗? Pointer.Page.ClientScript.RegisterStartupScript(Pointer.Master.GetType(), "message", "$(function() { ShowMessage('messageBox'," + Message + "',false); }", true);
  • 您可能应该添加您的确切问题。 JS错误?服务器错误?等
  • 你说“工作不好”,你到底是什么意思?您的 javascript 是否无法正确呈现,您是否查看过是否有任何 JS 错误?
  • 我用萤火虫试试这个。结果:调用者方法调用了 Js 函数但什么也没发生
  • 您尝试过@Manuel 的解决方案吗?这将延迟函数的执行,直到 DOM 完全加载。

标签: c# javascript jquery asp.net


【解决方案1】:

简单地说;你不能。

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

但是,您可以在服务器端生成 JavaScript 并将其输出到客户端。

在这里查看我的答案:Call javascript from vb.net code behind

【讨论】:

  • 我这样做,作为示例,我在函数中使用简单的警报,并使用该调用者方法从代码后面调用该函数。
【解决方案2】:

使用Page.ClientScript.RegisterStartupScript 注册的代码在页面末尾“呈现”。确切地说,在script 标记之前的form 关闭标记。但是,代码可能会在 DOM 树完全生成之前运行。

由于您的 ShowMessage 函数访问 DOM 树,您的问题可能与缺少 DOM 树元素有关。

如果我正确解释了您的问题,则页面上没有 JS 错误。这应该是 jquery 选择器行为的结果:

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

这将设置 ID 为 dtext 的所有元素的 HTML。由于可能还没有 ID 为 dtext 的元素,$("#dtext") 将返回一个空集合并且不执行任何操作。

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

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

服务器代码:

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

【讨论】:

  • 反映了问题的变化。
  • 你的解决方案没用,但是 +1 用于指向 Dom 树和使用 JQuery 事件
  • @Rev:您应该尝试更好地解释您的问题。究竟是什么不起作用。 “但在这种情况下,这种方法效果不佳。”是一个相当温和的问题描述。这就是为什么你的答案有 3 票反对的原因......
  • 好的。如果用简单的alert("foo"); 替换ShowMessage 函数中的所有代码会发生什么?如果可行,请尝试逐行添加现有代码。这样做以识别不工作的线路。尝试输出 jQuery 选择的结果:console.log($("span.ui-dialog-title").length); 等。
【解决方案3】:

你可以像这样从服务器端调用js函数

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

希望对你有帮助

【讨论】:

  • 请看我的问题,这不是解决方案
猜你喜欢
  • 2018-10-19
  • 2016-01-15
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多