【问题标题】:Page not found even when JsonResult method is present即使存在 JsonResult 方法也找不到页面
【发布时间】:2016-06-14 22:11:09
【问题描述】:

我在 MVC 应用程序中工作,调用 JsonResult AJAXly 时出现 404 错误

我的要求:

http://localhost:60890/ED/Document/GetGroupDocumentMergedPath?groupDocuments=%5B%7B%22GroupDocumentId%22%3A1314%2C%22TemplateId%22%3A212%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A149%2C%22TemplateId%22%3A208%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A570%2C%22TemplateId%22%3A210%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A198%2C%22TemplateId%22%3A209%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A90%2C%22TemplateId%22%3A201%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A119%2C%22TemplateId%22%3A206%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A2431%2C%22TemplateId%22%3A217%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A1004%2C%22TemplateId%22%3A211%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A1686%2C%22TemplateId%22%3A213%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A2076%2C%22TemplateId%22%3A215%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A2469%2C%22TemplateId%22%3A302%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A5140%2C%22TemplateId%22%3A220%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A5020%2C%22TemplateId%22%3A221%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A5105%2C%22TemplateId%22%3A222%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A5066%2C%22TemplateId%22%3A223%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A4039%2C%22TemplateId%22%3A225%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A4159%2C%22TemplateId%22%3A235%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A4283%2C%22TemplateId%22%3A245%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A4343%2C%22TemplateId%22%3A249%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A4399%2C%22TemplateId%22%3A250%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A4463%2C%22TemplateId%22%3A252%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A4856%2C%22TemplateId%22%3A256%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A4906%2C%22TemplateId%22%3A257%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A4956%2C%22TemplateId%22%3A258%2C%22GroupDocumentType%22%3A0%7D%2C%7B%22GroupDocumentId%22%3A2499%2C%22TemplateId%22%3A215%2C%22GroupDocumentType%22%3A0%7D%5D&actionType=715&_=1456902108180

控制器:

 [HttpGet]
 public JsonResult GetGroupDocumentMergedPath(string groupDocuments, int actionType){}

AJAX 调用:

$.ajax({
    url: '/ED/Document/GetGroupDocumentMergedPath',
    type: "GET",
    data: { groupDocuments: JSON.stringify(groupDocuments), actionType: 715 },
    beforeSend: function () {
    },
    success: function (data) {
        //Business logic
    },
    complete: function () {
        checkedIds = {};
        ToggleDisabled("print", false);
    }
});

场景:

在 AJAX 调用中,我发送的列表平均包含 20 个具有三个属性的对象。

我的查询字符串长度超过允许的长度导致错误或者我哪里出错了?

【问题讨论】:

  • 如果你只使用(比如)data: { groupDocuments: 'abc', actionType: 715 },,它是否有效?
  • @StephenMuecke 如果负载较小,它工作正常,我在这里尝试下载一组文档,当我为单个文档(列表中只有一个对象)下载时,它工作正常跨度>
  • 因为它是一个 GET,你可能超出了查询字符串的限制。尝试将其设置为 POST 但是为什么将其作为字符串发布 - 您应该发布对象并且参数应该是(比如)List<yourModel> documents
  • @RandomUser 发送数据时,GET方法将数据添加到URL中;并且 URL 的长度是有限的(最大 URL 长度为2048 characters)。
  • 您需要对 ajax 进行一些更改 - 添加 contentType: "application/json; charset=utf-8", 并更改 data JSON.stringfy({ groupDocuments: groupDocuments, actionType: 715 }), 假设 groupDocuments 是您的对象数组。

标签: jquery ajax asp.net-mvc asp.net-mvc-4 http-status-code-404


【解决方案1】:

不要在单个字符串中传递多个详细信息。您必须创建一个 ViewModel 并传递给 Data 中模型的 serializeObject。因此通过 AJAX 将数据传递给 Method 是一种安全且良好的方式。

如果你想从表单控件传递数据,那么序列化表单并通过 AJAX 传递。

请查看以下示例。 阿贾克斯调用

$.fn.serializeObject = function () {
            var o = {};
            var a = this.serializeArray();
            $.each(a, function () {
                if (o[this.name] !== undefined) {
                    if (!o[this.name].push) {
                        o[this.name] = [o[this.name]];
                    }
                    o[this.name].push(this.value || '');
                } else {
                    o[this.name] = this.value || '';
                }
            });
            return o;
        };
    form = $('#groupDocuments').serializeObject(); // groupDocuments is form Id
    var data = JSON.stringify({ model: form });    
    $.ajax({
        url: '/ED/Document/GetGroupDocumentMergedPath',
        type: "GET",
        data: data,
        beforeSend: function () {
        },
        success: function (data) {
            //Business logic
        },
        complete: function () {
            checkedIds = {};
            ToggleDisabled("print", false);
        }
    });

JasonResult 方法

  [HttpPost]
    public JsonResult GetGroupDocumentMergedPath(GroupDocumentViewModel model)
    {
    // Your Code here       
    }

查看模型

public class GroupDocumentViewModel
{   
//All your property which you passing from view to controller via AJAX  
}

【讨论】:

    猜你喜欢
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-10
    • 2018-09-25
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多