如何从服务器端 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>");
在 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>");