ASP菜单:如何避免回发并使用Javascript客户端脚本访问选定值
我必须实现一种从ASP水平菜单(使用配置文件生成)中选择值的方法。菜单的生成不是一个问题:我的实际问题是找到一种方法,让用户在不使用回发的情况下访问其值 我正在处理一个大而旧的项目,该项目的编码意图是根本不使用回发请求回发是设计上意外的,被认为是错误 为了达到我的目标,我尝试为以return false结尾的MenuItemClick事件编写一个JavaScript触发器,以避免回发(出于测试目的,目前JavaScript代码仅限于一个简单的测试警报和假返回)。但这不起作用:我无法让事件触发JavaScript函数:发生回发,这是不希望的 完整的代码由数千行组成(其中大部分与问题无关),这里是一个只有相关行的简略版本: Default.aspx:ASP菜单:如何避免回发并使用Javascript客户端脚本访问选定值,javascript,c#,jquery,webforms,postback,Javascript,C#,Jquery,Webforms,Postback,我必须实现一种从ASP水平菜单(使用配置文件生成)中选择值的方法。菜单的生成不是一个问题:我的实际问题是找到一种方法,让用户在不使用回发的情况下访问其值 我正在处理一个大而旧的项目,该项目的编码意图是根本不使用回发请求回发是设计上意外的,被认为是错误 为了达到我的目标,我尝试为以return false结尾的MenuItemClick事件编写一个JavaScript触发器,以避免回发(出于测试目的,目前JavaScript代码仅限于一个简单的测试警报和假返回)。但这不起作用:我无法让事件触发Ja
<%@ Register TagPrefix="CRB" Namespace="ConfigurableReportBuilder.PageControls" Assembly="ConfigurableReportBuilder" %>
<form id="form1" class="page" runat="server">
<CRB:HorizontalMenu ID="MainMenu" runat="server" RootNode="Menu/Items" StyleClass="ui-menu ui-state-hover"/>
//this works fine, no issue here.
</form>
Workspace.js:
var WS = (function ($) {
var test = function (event) {
alert("test");
return false; //prevent postback
};
(...)
return {// This dictionary contains references to public methods used in the project
test: test,
(...)
}
}
$(document).on("menuitemclick", '#MainMenu', WS.test); //setting the event trigger
我已经找到了一个能够达到预期目标的解决方案,但是请注意,它不尊重良好的编码实践。可能有更好的解决方案,但我找不到 其想法是放弃基于事件的MenuItemClick逻辑,恢复到ASP菜单的默认行为,将URL作为可单击菜单项(NavigateUrl)。URL将在主页中无需任何回发即可访问,因此可用于承载信息。。。作为小JavaScript代码 为此,必须在菜单项初始化期间将原始Javascript代码设置为NavigateUrl参数:
protected MenuItem getMenuItem(XmlNode menuNode)
{//function that initialize a MenuItem with an XML node as parameter
MenuItem mi = new MenuItem(); //creating a MenuItem object
//Assigning its properties:
mi.Text = menuNode.Attributes["text"].Value;
if (menuNode.Attributes["description"] != null)
mi.ToolTip = menuNode.Attributes["description"].Value;
if (menuNode.Attributes["configfile"] != null) {
mi.Value = menuNode.Attributes["configfile"].Value;
mi.NavigateUrl = "javascript:alert('"+mi.Value+"');"; //Note that this isn't an URL
}
}
因此,ASP菜单中的URL不是链接,而是将由在主页中执行的函数,而不经过任何事件。因此,这些函数可以用于检索所需的值,而无需执行任何回发事件:在我刚才给出的示例中,一个警报窗口显示所选的下拉值
protected MenuItem getMenuItem(XmlNode menuNode)
{//function that initialize a MenuItem with an XML node as parameter
MenuItem mi = new MenuItem(); //creating a MenuItem object
//Assigning its properties:
mi.Text = menuNode.Attributes["text"].Value;
if (menuNode.Attributes["description"] != null)
mi.ToolTip = menuNode.Attributes["description"].Value;
if (menuNode.Attributes["configfile"] != null) {
mi.Value = menuNode.Attributes["configfile"].Value;
mi.NavigateUrl = "javascript:alert('"+mi.Value+"');"; //Note that this isn't an URL
}
}