我想在visual studio 2012中从aspx页面调用javascript函数。该函数从数据库获取7个值,任意次数并根据这些值更改css,以及更改每个值的div标记转发器的实例
<asp:Repeater ID="repModules" runat="server">
<ItemTemplate>
<div id="<%#Eval("ModuleID")%>" onload="callFunction()">
//different div tags, which have their
//styles edited by the js function
</div>
<script type="text/javascript">
function callFunction() {
go("M1", "name", "20", "0", "80", "50", "70");
}
</script>
</ItemTemplate>
</asp:Repeater>
最终目标是从后面的aspx.net.cs页面获取变量,在函数中调用但它甚至不能正常工作。我试图在几个不同的地方和几个地方调用这个函数,并且已经坚持了一段时间了。 js脚本看起来像这样:
function go(Id, name, eworth, eattained, worth, attained, progress) {
//here the variables that are read in are
//assigned to variables defined in the js
}
我的设置方式不是很好,我们可以通过javascript访问aspx变量。任何输入或反馈将不胜感激。非常感谢你的时间。
答案 0 :(得分:1)
您正在为Repeater中的每一行声明相同的函数callFunction()。我没有这样做,而是在页面顶部声明一次。然后,在您的转发器中,调用该函数,从后面传入数据。
为此,您还可以使用ASP.Net功能,该功能允许您注册要在启动时调用的JavaScript代码。这是一个例子(在VB.Net中)。此代码将放在Repeater的ItemDataBound事件处理程序中。请注意,我正在调用“go()”函数而不是“callFunction()”函数。您不需要额外的功能,因为您可以直接调用“go()”。
Dim csm As ClientScriptManager = Page.ClientScript
Dim sb As New StringBuilder
sb.AppendLine("go(""M1"", ""name"", ""20"", ""0"", ""80"", ""50"", ""70"");")
csm.RegisterStartupScript(Page.GetType, "js_code_startup__unique_key", sb.ToString, True)
然后,您可以使用变量替换上面代码中的硬编码值。请注意,我使用两个双引号来转义sb.AppendLine调用中代码周围的双引号。
RegisterStartupScript调用中设置为True的第四个参数使其自动包含标记。
当页面加载时,此javascript代码将加载到页面底部并在遇到时执行。如果您愿意,可以尝试通过某种类型的onload函数调用它(可能在javascript中指定window.onload,或者使用jQuery document.ready)。
如果您不想使用ItemDataBound事件处理程序,您可能只是直接在脚本标记中调用该函数(尽管如果并非所有需要的项都在执行时加载,则可能会出现问题) 。要从数据库中获取值,您可能需要进行数据绑定,因此您必须执行类似于函数调用中第一个参数的操作。
<script type="text/javascript">
go('<%# Eval("YourVarName") %>', "name", "20", "0", "80", "50", "70");
</script>
更新 - 将代码转换为C#
我对C#并不熟悉,但这就是我认为的结果。我把它放在ItemDataBound事件处理程序中。我没有测试过这个,所以我不确定它是100%准确的。
protected void repModules_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e){
if (((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))) {
ClientScriptManager csm = Page.ClientScript;
StringBuilder sb = new StringBuilder();
sb.AppendLine("go(\"M1\", \"name\", \"20\", \"0\", \"80\", \"50\", \"70\");");
csm.RegisterStartupScript(Page.GetType, "js_code_startup__unique_key", sb.ToString, true);
}
}