ASP.NET用户控件中的Javascript函数

Ant*_*ton 12 javascript c# 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('<%=ExampleButton.ClientID%>');
        return false;
    }
</script>
<asp:Button ID="ExampleButton" runat="server" Text="Example"/>
Run Code Online (Sandbox Code Playgroud)

当用户将鼠标移动到按钮时,我想调用"example"函数,所以我为按钮添加了属性:

ExampleButton.Attributes.Add("onmouseover", "example()");
Run Code Online (Sandbox Code Playgroud)

它运作良好,但当我在同一页面上需要两个控件时,我遇到了问题.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()" />
Run Code Online (Sandbox Code Playgroud)

并且任何按钮上的onmouseover事件总是会调用第二个函数.我可以通过将带有客户端ID的java脚本代码直接添加到attriburte onmouseover来解决此问题.

ExampleButton.Attributes.Add("onmouseover", "[Here will be javascript code]");
Run Code Online (Sandbox Code Playgroud)

但对我来说这不是一个非常和谐的解决方案.请告知,我如何才能更好地解决此类问题.

PS会有更多的Javascript代码,例如我添加了两个字符串upper.

Ron*_*ger 27

我在另一个站点找到了一个允许您使用外部文件的解决方案

if (!Page.ClientScript.IsClientScriptIncludeRegistered("key"))

{

   string url = ResolveClientUrl("~/Scripts/file.js");

   Page.ClientScript.RegisterClientScriptInclude("key", url);

}
Run Code Online (Sandbox Code Playgroud)

  • 为什么这不是公认的解决方案?你是生命救星:D (3认同)

小智 8

你需要使用 this.id

$(document).ready(function () {
    load_v<%= this.ID %>    
});

function load_v<%= this.ID %>(fromclick) {
    alert('anything');
}
Run Code Online (Sandbox Code Playgroud)

因此,即使您在同一页面中需要两个或更多相同的控件,它们也会有不同的ID.希望这可以帮助!欢呼:)


Ode*_*ded 7

您需要注册脚本ClientScriptManager- 这样它们可以注册一次,无论控件添加到页面的频率如何:

// 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);
}
Run Code Online (Sandbox Code Playgroud)

  • @Anton - 听起来你需要重构你的CS文件. (3认同)