65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 jQuery ASP.NET 和 C# 实现右键菜单

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.91/5 (15投票s)

2010 年 5 月 18 日

CPOL

2分钟阅读

viewsIcon

106228

downloadIcon

5884

jQuery 上下文菜单控件。

引言

在这里,我将介绍一个 jQuery 上下文菜单控件。它是一个跨浏览器的 JavaScript 类,可以在各种浏览器上运行。

背景

我创建了一个上下文菜单,用于在 ListView 控件上执行一些操作。最初的上下文菜单是 Internet Explorer 特有的,并且不兼容跨浏览器。我同时包含 jQuery HTML。我使用 HTML 表格和 div 元素创建了它的布局,并使用 jQuery 显示它。我将其开发为一个跨浏览器的 jQuery 类。

菜单的 HTML 标记

当右键单击表格的任何一行时,菜单将出现。当左键单击包含闪电图标的单元格时,菜单将出现。

    <ul id="myMenu" class="contextMenu">
    <li class="insert"><a href="#insert">Add New</a></li>        
    <li class="edit"><a href="#edit">Edit</a></li>                    
    <li class="delete"><a href="#delete">Delete</a></li>            
    </ul> 

JQuery

添加 HTML 标记以调用容器以及字段和 ASP.NET 验证控件,如上图所示。我添加了 jQuery,用于使用动画打开和关闭弹出窗口,并调用隐藏的按钮,该按钮在数据验证后实际触发回发。

jQuery 脚本

<script type="text/javascript">
    $(document).ready(function() {

        $("#addNewCustomerInstructionsImg").click(function(ev) {
            toggleAddCustomerInstructions();
        });

        $("#addNewCustomerInstructionsLink").click(function(ev) {
            ev.preventDefault();
            toggleAddCustomerInstructions();
        });

        $("#addNewCustomerInstructionsClose").click(function(ev) {
            ev.preventDefault();
            toggleAddCustomerInstructions();
        });

        $("#customerResponse").fadeOut(5000);

        $(".customerRow").contextMenu({ menu: 'myMenu' }, 
	function(action, el, pos) { contextMenuWork(action, el, pos); });
       
        $(".openmenu").contextMenu({ menu: 'myMenu', leftButton: true }, 
	function(action, el, pos) { contextMenuWork(action, el.parent("tr"), pos); });
    });

        function contextMenuWork(action, el, pos) {

            switch (action) {
                case "delete":
                    {
                        var msg = "Delete " + $(el).find("#contactname").text() + "?";
                        $("#HiddenFieldRowId").val($(el).find("#customerid").text());
                        confirm(msg);
                        break;
                    }
                case "insert":
                    {
                        $("#TextBoxContactName").val("");
                        $("#TextBoxContactTitle").val("");
                        $("#TextBoxCountry").val("");
                        $("#TextBoxPhone").val("");

                        $("#addNewCustomer").modal({
                            close: true,
                            onOpen: modalOpenAddCustomer,
                            onClose: modalOnClose,
                            persist: true,
                            containerCss: ({ width: "500px", height: "275px", 
					marginLeft: "-250px" })
                        });
                        break;
                    }

                case "edit":
                    {
                        alert(
                                'Action: ' + action + '\n\n' +
                                'Element ID: ' + $(el).attr('id') + '\n\n' +
                                'X: ' + pos.x + '  Y: ' + pos.y + 
				' (relative to element)\n\n' +
                                'X: ' + pos.docX + '  Y: ' + pos.docY + 
				' (relative to document)'
                                );
                    }
            }
        }

   function modalOnClose(dialog) {
       dialog.data.fadeOut('slow', function() {
           dialog.container.slideUp('slow', function() {
               dialog.overlay.fadeOut('slow', function() {
                   $.modal.close(); // must call this to have SimpleModal       
                   // re-insert the data correctly and
                   // clean up the dialog elements
               });
           });
       });
    }    

这是在 ListView 上右键单击的方法

确认弹出窗口,如何从 ListView 中删除记录

确认事件删除记录 Jquery 函数

属性

上下文菜单控件只有一个 public 属性。它仅显示上下文菜单控件的当前版本。它不执行任何其他操作。

事件

上下文菜单控件只有一个事件 – Click 事件,当单击分隔符以外的项目时触发。

请注意,Click 事件处理程序是 C# 样式的事件处理程序。

使用控件

Head 标签下,在您的网页中添加对 *.js 文件的引用,如下所示:

Head 标签下

<script src="_assets/js/jquery-1.2.6.min.js" type="text/javascript"></script>
<script src="_assets/js/jquery.simplemodal-1.1.1.js" type="text/javascript"></script>
<script src="_assets/js/jquery.contextMenu.js" type="text/javascript"></script>

样式表

head 标签下添加样式表

<link href="_assets/css/StyleSheet.css" rel="stylesheet" type="text/css" />
<link href="_assets/css/confirm.css" rel="stylesheet" type="text/css" />   
<link href="_assets/css/jquery.contextMenu.css" rel="stylesheet" type="text/css" />

当您单击上下文菜单的任何项目时,将调用此方法。不要忘记在事件处理程序的最后调用 Hide 方法。

结论

我花了很多时间来为 jQuery 类创建类似 C# 的事件处理程序,最终我做到了。

历史

  • 2010 年 5 月 18 日:初始发布
© . All rights reserved.