在 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);