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

时间:2015-06-05 14:33:48

标签: javascript c# asp.net client-side server-side

在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是客户端。有什么方法可以做到吗?

2 个答案:

答案 0 :(得分:2)

如果加载页面,您可以注册一些要执行的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字符串,然后将其parsing用于JavaScript

最后,执行服务器端和客户端端代码的想法顺序与HTTP协议的设计相矛盾。您可以做的最好的事情是使用先进的JavaScript / C#工具,这样可以轻松地操纵两个环境之间的通信。在这种情况下会想到SignalR

答案 1 :(得分:0)

这对我有用

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