从.ascx文件调用Javascript函数时出错
我将VS 2003应用程序迁移到VS 2010。 该应用程序具有在default.aspx中引用的side_menu.ascx。 在side_menu.ascx中,调用了side_menu.js中的javascript函数menu 但是,当调用函数菜单时,它会在运行时发出一个错误-“找不到函数菜单”这在VS 2003中运行良好 这就是我得到这个错误的地方-这个代码在side_menu.ascx中从.ascx文件调用Javascript函数时出错,javascript,asp.net,Javascript,Asp.net,我将VS 2003应用程序迁移到VS 2010。 该应用程序具有在default.aspx中引用的side_menu.ascx。 在side_menu.ascx中,调用了side_menu.js中的javascript函数menu 但是,当调用函数菜单时,它会在运行时发出一个错误-“找不到函数菜单”这在VS 2003中运行良好 这就是我得到这个错误的地方-这个代码在side_menu.ascx中 new menu (SIDE_MENU_ITEMS, SIDE_MENU_POS, SIDE_ME
new menu (SIDE_MENU_ITEMS, SIDE_MENU_POS, SIDE_MENU_STYLES)
<%@ Control Language="vb" AutoEventWireup="false" Codebehind="side_menu.ascx.vb" Inherits="TOrders.UI.Controls.SideMenu" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<table cellPadding="0" width="100%">
<tr>
<td vAlign="top" align="left" width="100%">
<table cellSpacing="10" cellPadding="0" width="100%">
<tr>
<td align="left">
<asp:Literal ID="litError" Runat="server" Text="<font color=#E0E0E0 size=1>* </font>" Visible="False"></asp:Literal><asp:label id="lblJump" runat="server" ForeColor="#E0E0E0" Font-Size="XX-Small">Jump to Telex/Order:</asp:label>
<br>
<asp:textbox id="txtJumpTo" runat="server" Width="125px" CssClass="textbox"></asp:textbox> <input type="button" value="Go" runat="server" id="btnGo" class="TabOut-Button">
</td>
</tr>
</table>
</td>
</tr>
</table>
<script language="JavaScript" src="~/library/scripts/side_menu.js" type="text/javascript"></script>
<script language="JavaScript" src="~/library/scripts/side_menu_items.js" type="text/javascript"></script>
<script language="JavaScript" src="~/library/scripts/side_menu_tpl.js" type="text/javascript"></script>
<script language="JavaScript" type="text/javascript">
<!--
new menu (SIDE_MENU_ITEMS, SIDE_MENU_POS, SIDE_MENU_STYLES);
// -->
</script>
这是default.aspx中的代码
<!-- Side Menu -->
<td valign="top" class="page_side_menu">
<mycontrols:sidemenu id="SideMenu1" runat="server"/>
</td>
这是side_menu.ascx中的代码
new menu (SIDE_MENU_ITEMS, SIDE_MENU_POS, SIDE_MENU_STYLES)
<%@ Control Language="vb" AutoEventWireup="false" Codebehind="side_menu.ascx.vb" Inherits="TOrders.UI.Controls.SideMenu" TargetSchema="http://schemas.microsoft.com/intellisense/ie5" %>
<table cellPadding="0" width="100%">
<tr>
<td vAlign="top" align="left" width="100%">
<table cellSpacing="10" cellPadding="0" width="100%">
<tr>
<td align="left">
<asp:Literal ID="litError" Runat="server" Text="<font color=#E0E0E0 size=1>* </font>" Visible="False"></asp:Literal><asp:label id="lblJump" runat="server" ForeColor="#E0E0E0" Font-Size="XX-Small">Jump to Telex/Order:</asp:label>
<br>
<asp:textbox id="txtJumpTo" runat="server" Width="125px" CssClass="textbox"></asp:textbox> <input type="button" value="Go" runat="server" id="btnGo" class="TabOut-Button">
</td>
</tr>
</table>
</td>
</tr>
</table>
<script language="JavaScript" src="~/library/scripts/side_menu.js" type="text/javascript"></script>
<script language="JavaScript" src="~/library/scripts/side_menu_items.js" type="text/javascript"></script>
<script language="JavaScript" src="~/library/scripts/side_menu_tpl.js" type="text/javascript"></script>
<script language="JavaScript" type="text/javascript">
<!--
new menu (SIDE_MENU_ITEMS, SIDE_MENU_POS, SIDE_MENU_STYLES);
// -->
</script>
跳转到电传/订单:
这是javascript函数side_menu.js
var menus = [];
function menu (item_struct, pos, styles) {
// browser check
this.item_struct = item_struct;
this.pos = pos;
this.styles = styles;
this.id = menus.length;
this.items = [];
this.children = [];
this.add_item = menu_add_item;
this.hide = menu_hide;
this.onclick = menu_onclick;
this.onmouseout = menu_onmouseout;
this.onmouseover = menu_onmouseover;
this.onmousedown = menu_onmousedown;
var i;
for (i = 0; i < this.item_struct.length; i++)
new menu_item(i, this, this);
for (i = 0; i < this.children.length; i++)
this.children[i].visibility(true);
menus[this.id] = this;
}
var菜单=[];
功能菜单(项目结构、位置、样式){
//浏览器检查
this.item_struct=item_struct;
this.pos=pos;
this.styles=样式;
this.id=menus.length;
此参数为.items=[];
这是:children=[];
this.add\u item=菜单添加项;
this.hide=菜单\隐藏;
this.onclick=菜单_onclick;
this.onmouseout=菜单_onmouseout;
this.onmouseover=菜单_onmouseover;
this.onmousedown=菜单_onmousedown;
var i;
对于(i=0;i
尝试从javascript src路径中删除tilde(~),并确保路径实际上是正确的对我来说是相同的,因此解决方案是:
更改相对路径并将其保留在删除根中~/
之前
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="wucDTmisc1.ascx.vb" Inherits="wucDTmisc1" %>
<%@ Register Src="wucBeneficiarios.ascx" TagName="wucBeneficiarios" TagPrefix="uc1" %>
<%@ Register Assembly="Coolite.Ext.Web" Namespace="Coolite.Ext.Web" TagPrefix="ext" %>
<%@ Register Src="Controles/wucMoneda.ascx" TagName="wucMoneda" TagPrefix="uc1" %>
<link href="~/css/content.css" rel="stylesheet" type="text/css" />
<link href="~/css/Blue.css" rel="stylesheet" type="text/css" />
<script src="~/js/siscli.js" type="text/javascript"></script>
<script src="~/js/json2.js" type="text/javascript"></script>
<script src="~/js/date.js" type="text/javascript"></script>
之后
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="wucDTmisc1.ascx.vb" Inherits="wucDTmisc1" %>
<%@ Register Src="wucBeneficiarios.ascx" TagName="wucBeneficiarios" TagPrefix="uc1" %>
<%@ Register Assembly="Coolite.Ext.Web" Namespace="Coolite.Ext.Web" TagPrefix="ext" %>
<%@ Register Src="Controles/wucMoneda.ascx" TagName="wucMoneda" TagPrefix="uc1" %>
<link href="/css/content.css" rel="stylesheet" type="text/css" />
<link href="/css/Blue.css" rel="stylesheet" type="text/css" />
<script src="/js/siscli.js" type="text/javascript"></script>
<script src="/js/json2.js" type="text/javascript"></script>
<script src="/js/date.js" type="text/javascript"></script>
在寻找解决方案的同时,我意识到在控件中最好保留JS代码
这对我来说很有效,我希望你也一样。你需要的也许是解释过的东西。您必须将“~”替换为用户控件后面的内容,即用户控件当前所在的位置,而不是应用程序中物理登录的位置
<script language="javascript" type="text/javascript" src="<%=Page.ResolveUrl("~/JS/VerticalMenu.js")%>"></script>
<script language="javascript" type="text/javascript" src="<%=Page.ResolveUrl("~/library/scripts/side_menu_items.js")%>"></script>
<script language="javascript" type="text/javascript" src="<%=Page.ResolveUrl("~/library/scripts/side_menu_tpl.js")%>"></script>
已解决 我终于找到了解决问题的办法。它带有脚本标记 我把它改写为
<script src="../library/scripts/side_menu.js" type="text/javascript" />
而不是
<script src="../library/scripts/side_menu.js" type="text/javascript"></script>
我将在这里指出,路径开头的~
仅被ASP.NET服务器端控件识别为表示基本应用程序路径,而不是添加另一个答案(因为当前有两个答案是正确的)。这对浏览器来说毫无意义。从visual studio中拖动JS文件并将其放在head控件上我尝试了上面的所有建议,但仍然得到相同的错误,我将函数复制到与ascx文件相同的目录中,并将脚本标记更改为,但它仍然给我相同的错误-未定义菜单。标签中的src存在一些问题???我有IE8和Windows7。您知道这有什么问题吗?我尝试了这两种方法,但仍然得到相同的错误,不确定这是否正确-但是我需要将jquery-1.1.1.js和其他.js文件添加到脚本文件夹中吗?我在根目录中没有看到脚本文件夹我没有看到您发布的代码有任何其他问题,也没有对jquery api的引用,但是您可能还有一些其他脚本错误。我会在浏览器错误控制台中查看是否报告了任何其他错误。我尝试了上述所有建议,但仍然得到相同的错误,我相信这是一个Web应用程序项目-我如何发现?以下是一篇关于MSDN的解释很好的文章:。简而言之,如果每个页面都有一个.dll,那么您正在处理一个ASP.NET网站项目
。否则,您将直接在网站的根目录中有一个BIN,其中只有一个.dll用于整个应用程序(加上应用程序引用的任何其他dll)。它被称为ASP.net Web应用程序
它是一个ASP.net Web应用程序。