C# ASP.NET用户控件中的Javascript函数
我使用javascript函数创建了ASP.NET用户控件:C# ASP.NET用户控件中的Javascript函数,c#,javascript,asp.net,user-controls,webforms,C#,Javascript,Asp.net,User Controls,Webforms,我使用javascript函数创建了ASP.NET用户控件: <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="BingTranslator.Web.WebUserControl1" %> <script type="text/javascript"> function example() { alert('<
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestControl.ascx.cs" Inherits="BingTranslator.Web.WebUserControl1" %>
<script type="text/javascript">
function example() {
alert('<%=ExampleButton.ClientID%>');
return false;
}
</script>
<asp:Button ID="ExampleButton" runat="server" Text="Example"/>
它工作得很好,但当我在同一页上需要两个控件时,我遇到了一个问题。ASP.NET使用两个同名函数生成代码,有什么问题:
<script type="text/javascript">
function example() {
alert('TestControl1_ExampleButton');
return false;
}
</script>
<input type="submit" name="TestControl1$ExampleButton" value="Example" id="TestControl1_ExampleButton" onmouseover="example()" />
<script type="text/javascript">
function example() {
alert('TestControl2_ExampleButton');
return false;
}
</script>
<input type="submit" name="TestControl2$ExampleButton" value="Example" id="TestControl2_ExampleButton" onmouseover="example()" />
但对我来说,这不是一个非常和谐的解决方案。请告知,我如何才能更好地解决此类问题
另外,还会有更多的Javascript代码,例如,我添加了两个字符串。您需要使用注册您的脚本-这样,无论控件添加到页面的频率有多高,它们都可以注册一次:
// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;
// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
String cstext1 = "alert('Hello World');";
cs.RegisterStartupScript(cstype, csname1, cstext1, true);
}
您需要使用
此.id
$(document).ready(function () {
load_v<%= this.ID %>
});
function load_v<%= this.ID %>(fromclick) {
alert('anything');
}
$(文档).ready(函数(){
装载
});
函数加载(从单击开始){
警惕(“任何事”);
}
因此,即使在同一页中需要两个或多个相同的控件,它们也将具有不同的ID。
希望这有帮助!干杯:)我在另一个网站上找到了一个解决方案,允许您使用外部文件
if (!Page.ClientScript.IsClientScriptIncludeRegistered("key"))
{
string url = ResolveClientUrl("~/Scripts/file.js");
Page.ClientScript.RegisterClientScriptInclude("key", url);
}
是的,这是一种可能的方法,但我不想将javascript代码移动到CS文件中,因为它太大了。@Anton-听起来你需要重构你的CS文件。为什么这不是公认的解决方案?你是一个救世主:但无论如何,这将创建许多相同的Javascript函数,这是应该避免的。另外,我猜在
ready
事件中,您希望编写load_v()
,对吗?那点击的是什么意思?
$(document).ready(function () {
load_v<%= this.ID %>
});
function load_v<%= this.ID %>(fromclick) {
alert('anything');
}
if (!Page.ClientScript.IsClientScriptIncludeRegistered("key"))
{
string url = ResolveClientUrl("~/Scripts/file.js");
Page.ClientScript.RegisterClientScriptInclude("key", url);
}