如何从服务器端 C# 代码触发客户端 javascript?

How to trigger clientside javascript from a serverside C# code?

在 ASP.Net 站点中,我想使用一些 javascript - 比方说 alert() 功能 - 在事件发生后;我希望能够使用 javascript 中的事件参数。例如:

protected void SomeEventName(object sender, eventArgs e)
{
   int parameter = 0;
   // Do event stuff, which might effect the parameter
   javascript.alert("In the end of the funtion, the parameter is: "+parameter); // made up syntax, kids do not try this at home.
}

问题是,事件是服务器端的,javascript是客户端的。我还有什么办法可以做到这一点吗?

您可以像这样注册一些 JavaScript 以便在页面加载后立即执行:

Page.ClientScript.RegisterStartupScript(this.GetType(), "SomeUniqueTextHere", "yourJSFunction();", true);

编辑

至于参数,您绝对可以像这样将参数从 C# 传递到 JavaScript:

int parameter = 0;
string parameterStr = "hello";
Page.ClientScript.RegisterStartupScript(this.GetType(), "SomeUniqueTextHere", string.format("yourJSFunction({0}, '{1}');", parameter, parameterStr), true);

请注意,在此示例中,您 JavaScript 函数应定义为接受两个参数。像这样:

<script type="text/javascript">
    function yourJSFunction (val1, val2) {
        alert(val1);
        alert(val2);
    }
</script>

此外,值得注意的是 HiddenField 控件可用于在客户端和服务器之间传递字符串值:

ASPX:

<asp:HiddenField ID="MyHiddenField" runat="server" Value="MyValue" />

JavaScript:

alert(document.getElementById("<%= MyHiddenField.ClientID %>").value);

C#:

string value = MyHiddenField.Value;

为了传输复杂的 C# 对象,考虑将它们字符串化为 JSON string and then parsing 它们在 JavaScript

最后,顺序执行服务器端和客户端代码的想法与HTTP协议的设计相矛盾。您能做的最好的事情就是使用高级 JavaScript/C# 工具,在这些工具中操作两个环境之间的通信变得很容易。在这种情况下,我想到了 SignalR

这对我有用

Page.ClientScript.RegisterStartupScript(
this.GetType(),
"scriptsKey",
"<script type='text/JavaScript' language='javascript'>alert('" +parameter+ "');</script>");