【问题标题】:JqGrid 404 on get from controller从控制器获取 JqGrid 404
【发布时间】:2015-02-11 03:39:54
【问题描述】:

C#MVC4 我收到以下错误:

GET http://BLAHBLAHBLAH/Address/AddressData/ [HTTP/1.1 404 Not Found 71ms]

在调试器中。 我的JS定义如下:

$(function () {

    var filter = $("#ClientId").val();

    //Address Grid
    $("#tickets").jqGrid({
        url: '/Address/AddressData/',
        datatype: 'json',
        mtype: 'GET',
        postData: {
            filters: filter
        },
        closeOnEscape: true,
        multipleSearch: true,
        closeAfterSearch: true,
        colNames: ['Action', 'AddressId', 'AddressLine1', 'AddressLine2', 'City', 'State', 'Zip', 'Available'],
        colModel: [
            {
                name: 'Action',
                width: 220,
                align: 'center',
                sortable: false,
                search: false,
                formatter: EditBtnFormatter,

            },
            {
                name: 'Id',
                index: 'Id',
                width: 300,
                align: 'left',
                sortable: true,
                search: true,

            },
            {
                name: 'AddressLine1',
                index: 'AddressLine1',
                width: 800,
                align: 'left',
                sortable: true,
                search: false,


            },
            {
                name: 'AddressLine2',
                index: 'AddressLine2',
                width: 600,
                align: 'left',
                sortable: true,
                search: false,


            },
            {
                name: 'City',
                index: 'City',
                width: 350,
                align: 'left',
                sortable: true,
                search: false,

            },
            {
                name: 'State',
                index: 'State',
                width: 200,
                align: 'left',
                sortable: true,
                search: false,
            },
            {
                name: 'Zip',
                index: 'Zip',
                width: 250,
                align: 'left',
                sortable: true,
                search: false,
            },
            {
                name: 'Available',
                index: 'Deleted',
                width: 250,
                align: 'left',
                sortable: true,
                search: false,
            }
        ],

        pager: jQuery('#pager'),
        rowNum: 30,
        rowList: [20, 30, 40, 50],
        search: true,
        sortname: 'AddressLine1',
        sortorder: 'asc',
        viewrecords: true,
        gridview: true,
        imgpath: 'content/themes/base/images',
        caption: 'Addresses',
        formatter: 'Action',
        autowidth: true,
        formatoptions: {
            keys: true,
            editformbutton: true
        }
    }).jqGrid('gridResize', null).navGrid('#pager', { view: false, del: false, add: false, edit: false },
        {}, // default settings for edit
        {}, // default settings for add
        {}, // delete
        {
            closeOnEscape: true, multipleSearch: true, searchOnEnter: true,
            closeAfterSearch: true
        }, // search options
        {}
    );
    jQuery("#addrs").setGridWidth(1200, true);
    jQuery("#addrs").setGridHeight(600, true);

    function EditBtnFormatter(cellvalue, options, rowObject) {
        console.log(rowObject);

        return (('<a title="Edit" href ="@Url.Action("Edit","Address")' + '/' + rowObject[1] + '"><img src="../../Content/themes/base/images/edit_icon_fer_checklist.png" /></a>'));
    }

我的控制器是

public JsonResult AddressData(string sidx, string sord, int page, int rows, bool _search, string filters)
    {
        var newfil = Int32.Parse(filters);
        var pageSize = rows;
        var totalRecords = (from addrs in db.Addresses where addrs.ClientId == newfil select addrs).Count();
        var totalPages = (int)Math.Ceiling(totalRecords / (float)pageSize);
        string orderby = sidx + " " + sord;
        if (sidx == "AddressLine1")
        {
            orderby = "AddressLine1" + " " + sord;
        }
        var addresses = (from addr in db.Addresses select addr).OrderBy(orderby);

        if (_search)
        {
            addresses = addresses.Where(x => x.ClientId.Equals(newfil));
        }

        var addressData =
            (from addrs in addresses
             select new { addrs.Id, addrs.AddressLine1, addrs.AddressLine2, addrs.City, addrs.State, addrs.Zip, addrs.Deleted }).ToList
                ();
        var jsonData = new
        {
            total = totalPages,
            page,
            records = totalRecords,
            rows = (
                       from item in addressData
                       select new
                       {
                           cell = new[]
                                       {
                                           string.Empty,item.Id.ToString(), item.AddressLine1, item.AddressLine2, item.City, item.State, item.Zip, item.Deleted
                                       }
                       }
                   )
        };
        return Json(jsonData, JsonRequestBehavior.AllowGet);
    }

它在本地工作,但由于某种原因,它不会填充网格,即使我知道链接有效,我也会收到 404 错误。我希望有人能指出我忽略的一个愚蠢的错误。

【问题讨论】:

  • 您能否在网络浏览器中验证应该在您的解决方案中打开哪个正确 URL?如果未找到 /Address/AddressData/ (http://BLAHBLAHBLAH/Address/AddressData/) - 这是错误的,那么您可能只是在 URL 中添加了一些前缀。
  • AddressData 是将数据加载到地址控制器上的网格的方法。我让 jqgrid 在这个应用程序的几个不同页面上工作,实际上只是从一个页面复制粘贴到另一个页面,所以我很困惑。这是在编辑页面上。在索引页面上,我设置了与 url='/Address/GridData' 相同的方式,它可以工作......
  • 另外,如果我使用 @Url.Action("AddressData") 应该使用该方法的相对链接,它仍然不起作用。它就像 AddressData 不存在,但正如我在控制器中列出的那样。
  • 问题不在于我不相信你。我只想找到你的问题的原因。您是否尝试在网络浏览器中验证哪个正确的 URL?典型的问题是:您在站点上的某个子文件夹 中安装了您的项目。所以正确的 URL 是http://BLAHBLAHBLAH/SiteNameAddress/AddressData/。我个人使用路径相对于当前页面。我使用window.location.pathname 来计算baseUrl,就像the answer 一样。
  • 我尝试了这个 var pathArray = window.location.pathname.split('/'); var rootPath = ''; for (var i = 0; i

标签: c# jquery asp.net-mvc-4 jqgrid


【解决方案1】:

运行 localhost 时,它通常将项目名称放在 localhost 之后,如下所示:

http://localhost/projectname/page

在服务器上运行时,您会丢失项目名称:

http://server/page

确保您在 jquery 中的路径意识到这一点。

【讨论】:

  • BLAHBLAHBLAH{localhost 是我认为的应用程序的预期服务器}/Address{controller}/AddressData{method}/ 我在那里遗漏了什么吗?
  • 404 显然是在告诉您它找不到该页面。尝试直接从服务器上的浏览器访问页面/方法,看看是否可以找到正确的路径,然后找出区别。
猜你喜欢
  • 1970-01-01
  • 2019-12-29
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
相关资源
最近更新 更多