Asp.net mvc 通过JQ网格进行搜索时未调用Action类

Asp.net mvc 通过JQ网格进行搜索时未调用Action类,asp.net-mvc,Asp.net Mvc,我使用的是MVC 2.0 web应用程序,其中很少有按钮的onclick调用动作方法,但当我第一次按search按钮时,会调用动作方法,但之后如果我尝试单击search按钮,则不会调用动作方法 我还要告诉您,我正在使用JQ网格在按钮onclick上显示数据。 请参阅下面的代码片段 函数LoadGriddata,类型{ var showGrid = $("#showGrid"); var navigation = $("#navigation");

我使用的是MVC 2.0 web应用程序,其中很少有按钮的onclick调用动作方法,但当我第一次按search按钮时,会调用动作方法,但之后如果我尝试单击search按钮,则不会调用动作方法

我还要告诉您,我正在使用JQ网格在按钮onclick上显示数据。 请参阅下面的代码片段

函数LoadGriddata,类型{

        var showGrid = $("#showGrid");
        var navigation = $("#navigation");

        showGrid.jqGrid({
            url: '/Customer/CustomerSearchInfo',
            datatype: 'json',
            mtype: 'POST',
            cache: false,
            postData: { param: data, type: type },

            colNames: ['Customer Name', 'Contact Name', 'Company Number', 'Customer Number', 'Link Number', 'Phone', 'SalesRep Name', 'Sequence'],
            colModel: [
              { name: 'COMPANY_NAME', index: '1', align: 'left', sortable: true },
              { name: 'CONTACT_NAME', index: '2', align: 'left', sortable: true },
              { name: 'COMPANY_NUM', index: '3', align: 'left', sortable: true },
              { name: 'CUSTOMER_NUM', index: '4', align: 'left', sortable: true },
              { name: 'LINK_NUM', index: '5', align: 'left', sortable: true },
              { name: 'PHONE_1', index: '6', align: 'left', sortable: true },
              { name: 'SALESREP_NUM', index: '7', align: 'left', sortable: true },
              { name: 'ADDRESS_SEQ_NUM', index: '8', align: 'left', sortable: true }
             ],
            pager: navigation,
            rowNum: 10,
            rowList: [5, 10, 20, 30, 50],
            viewrecords: true,
            caption: '',
            height: '250px',
            sortorder: 'asc',
            sortname: '0',
            shrinkToFit: true,
            autowidth: true,
             }
        })

    }; 
        try
        {
            var custInfo = new List<Customer>();
            switch (type)
            {
                case 1:
                    custInfo = custDO.GetCustomerInfo(customerID: param);
                    break;
                case 2:
                    custInfo = custDO.GetCustomerInfo(customerName: param);
                    break;
                case 3:
                    custInfo = custDO.GetCustomerInfo(contactName: param);
                    break;
                case 4:
                    custInfo = custDO.GetCustomerInfo(companyID: param);
                    break;
                case 5:
                    custInfo = custDO.GetCustomerInfo(salesRepID: param);
                    break;
                case 6:
                    custInfo = custDO.GetCustomerInfo(phone: param);
                    break;
                case 7:
                    custInfo = custDO.GetCustomerInfo(addrtype: param);
                    break;
                case 8:
                    custInfo = custDO.GetCustomerInfo(status: param);
                    break;
                case 9:
                    custInfo = custDO.GetCustomerInfo(linkID: param);
                    break;
            }

                            return custInfo != null
                       ? Json(GetJson(custInfo, 10, custInfo.Count, 0),
                              JsonRequestBehavior.DenyGet)
                       : Json(null, JsonRequestBehavior.DenyGet);
        }
        catch (Exception ex)
        {
            Response.StatusCode = 500;
            return Json(null, JsonRequestBehavior.DenyGet);
        }


    }
第二次未调用/Customer/CustomerSearchInfo中提到的操作方法

[AcceptVerbsHttpVerbs.Post] public ActionResult CustomerSearchInfo字符串参数,int类型 {

        try
        {
            var custInfo = new List<Customer>();
            switch (type)
            {
                case 1:
                    custInfo = custDO.GetCustomerInfo(customerID: param);
                    break;
                case 2:
                    custInfo = custDO.GetCustomerInfo(customerName: param);
                    break;
                case 3:
                    custInfo = custDO.GetCustomerInfo(contactName: param);
                    break;
                case 4:
                    custInfo = custDO.GetCustomerInfo(companyID: param);
                    break;
                case 5:
                    custInfo = custDO.GetCustomerInfo(salesRepID: param);
                    break;
                case 6:
                    custInfo = custDO.GetCustomerInfo(phone: param);
                    break;
                case 7:
                    custInfo = custDO.GetCustomerInfo(addrtype: param);
                    break;
                case 8:
                    custInfo = custDO.GetCustomerInfo(status: param);
                    break;
                case 9:
                    custInfo = custDO.GetCustomerInfo(linkID: param);
                    break;
            }

                            return custInfo != null
                       ? Json(GetJson(custInfo, 10, custInfo.Count, 0),
                              JsonRequestBehavior.DenyGet)
                       : Json(null, JsonRequestBehavior.DenyGet);
        }
        catch (Exception ex)
        {
            Response.StatusCode = 500;
            return Json(null, JsonRequestBehavior.DenyGet);
        }


    }
以下两个搜索按钮供参考:

输入id=btnCustID类型=按钮类=按钮搜索标题=按客户id搜索 onclick=LoadGriddocument.getElementById'txtCustID'。值,1

输入id=btnCustName类型=按钮类=按钮搜索标题=按客户名称搜索
onclick=LoadGriddocument.getElementById'txtCustName'.value,2

我建议您安装,看看到底发生了什么;对于初学者:是第二次发出请求吗?它看起来像什么?

您的JavaScript将无法工作,因为您正在尝试重新初始化已经初始化的jqGrid。您可以做的事情很少

您可以在再次初始化jqGrid之前卸载jqGrid。下载网格时,您需要标记“自定义”复选框:

var showGrid = $("#showGrid");
var navigation = $("#navigation");

showGrid.jqGrid('GridUnload');
...
您只需更改postData并重新加载jqGrid,无需重新初始化。您需要提前初始化它:

var showGrid = $("#showGrid");
showGrid.setPostData({ param: data, type: type });         
showGrid.jqGrid('setGridParam', { page: 1 }).trigger("reloadGrid");

或者您可以实现本机jqGrid搜索,这里有一些简单的描述:

是的,第二次它没有调用action类,即使在调试模式下它也不会被命中。感谢tpeczek,它解决了我的问题,但另一个问题是,在第二次搜索时,数据会得到反映,但我希望这样它还需要清除该页面中文本框搜索字段中以前的值。jq网格是否有任何属性可以这样做,或者我们是否需要为每个存在的文本框单独清除文本框值。在设置jqgrid postData后,将这些值添加到脚本:$'txtCustID'.val;$'txtCustName'.val;