在 C# 后面的代码上激活 javascript 字符串加载
Activate javascript string onload on code behind C#
美好的一天!
我需要帮助来激活我的 javascript 功能,通过加载隐藏代码。
这是我的代码:
string script = @"var applyCss = function () {
var css = '#CalendarPanel1-month-day-20170607, #CalendarPanel1-month-day-20170614 {background-color: #D0D3D4;}';
Ext.net.ResourceMgr.registerCssClass('someCssClassId', css);
}; ";
ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "css", script, true);
顺便说一句,我上面的代码通过按钮点击在前端工作。
但我想要的结果是,我希望我的 javascript 函数无需单击按钮即可加载页面。我将 javascript 函数放在代码隐藏中,因为我会将动态日期放在 css 变量中。上面的代码仍然有静态变量。 (CalendarPanel1-month-day-20170607)
很乐意感谢任何回应/解决方案。非常感谢!
您可以使用立即调用的函数来完成此操作。基本上,您无需为 javascript 函数命名,而是在定义后立即调用它。
例如:
var script = @"(function () {alert('Hello');})(); ";
ScriptManager.RegisterStartupScript(this, typeof(Page), "123", script, true);
您需要将函数体用括号括起来,然后用另一组括号括起来以调用该函数。
您还可以将参数传递给您的函数(我假设这是您想要做的):
var myAlertText = "Hello Hello";
var script = @"(function (myText) {alert(myText);})('" + myAlertText + "');" ;
如果我是你,我会在客户端代码中定义该函数,然后使用正确的参数从代码后面调用它。
从代码后面调用 javascript 代码的另一种更奇特的方法是使用 X.Call()
。看看这个例子:
<%@ Page Language="C#" %>
<!DOCTYPE html>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
string script = @"var myJSSideVar = 'my var value';
var applyCss = function (paramOne, paramTwo) {
var css = '#CalendarPanel1-month-day-20170607, #CalendarPanel1-month-day-20170614 {background-color: #D0D3D4;}';
Ext.net.ResourceMgr.registerCssClass('someCssClassId', css);
Ext.Msg.alert('applyCss called.', 'I\'ve been run with parameters: (' + paramOne + ', ' + paramTwo + ').');
};";
var hi = "hello";
X.AddScript(script);
X.Call("applyCss", new object[] { hi, new JRawValue("myJSSideVar") });
}
}
</script>
<html>
<head runat="server">
<title></title>
</head>
<body>
<form runat="server" id="form1">
<div>
<ext:ResourceManager runat="server" />
</div>
</form>
</body>
</html>
注意发送给脚本调用的第二个参数是 "raw",即它调用:applyCss("hello", myJSSideVar)
如果您只需要传递一个参数,则不需要传递一个数组,例如X.Call("applyCss", hi);
美好的一天!
我需要帮助来激活我的 javascript 功能,通过加载隐藏代码。
这是我的代码:
string script = @"var applyCss = function () {
var css = '#CalendarPanel1-month-day-20170607, #CalendarPanel1-month-day-20170614 {background-color: #D0D3D4;}';
Ext.net.ResourceMgr.registerCssClass('someCssClassId', css);
}; ";
ScriptManager.RegisterClientScriptBlock(this, typeof(Page), "css", script, true);
顺便说一句,我上面的代码通过按钮点击在前端工作。
但我想要的结果是,我希望我的 javascript 函数无需单击按钮即可加载页面。我将 javascript 函数放在代码隐藏中,因为我会将动态日期放在 css 变量中。上面的代码仍然有静态变量。 (CalendarPanel1-month-day-20170607)
很乐意感谢任何回应/解决方案。非常感谢!
您可以使用立即调用的函数来完成此操作。基本上,您无需为 javascript 函数命名,而是在定义后立即调用它。
例如:
var script = @"(function () {alert('Hello');})(); ";
ScriptManager.RegisterStartupScript(this, typeof(Page), "123", script, true);
您需要将函数体用括号括起来,然后用另一组括号括起来以调用该函数。
您还可以将参数传递给您的函数(我假设这是您想要做的):
var myAlertText = "Hello Hello";
var script = @"(function (myText) {alert(myText);})('" + myAlertText + "');" ;
如果我是你,我会在客户端代码中定义该函数,然后使用正确的参数从代码后面调用它。
从代码后面调用 javascript 代码的另一种更奇特的方法是使用 X.Call()
。看看这个例子:
<%@ Page Language="C#" %>
<!DOCTYPE html>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!X.IsAjaxRequest)
{
string script = @"var myJSSideVar = 'my var value';
var applyCss = function (paramOne, paramTwo) {
var css = '#CalendarPanel1-month-day-20170607, #CalendarPanel1-month-day-20170614 {background-color: #D0D3D4;}';
Ext.net.ResourceMgr.registerCssClass('someCssClassId', css);
Ext.Msg.alert('applyCss called.', 'I\'ve been run with parameters: (' + paramOne + ', ' + paramTwo + ').');
};";
var hi = "hello";
X.AddScript(script);
X.Call("applyCss", new object[] { hi, new JRawValue("myJSSideVar") });
}
}
</script>
<html>
<head runat="server">
<title></title>
</head>
<body>
<form runat="server" id="form1">
<div>
<ext:ResourceManager runat="server" />
</div>
</form>
</body>
</html>
注意发送给脚本调用的第二个参数是 "raw",即它调用:applyCss("hello", myJSSideVar)
如果您只需要传递一个参数,则不需要传递一个数组,例如X.Call("applyCss", hi);