javascript - MVC .NET 上的 ajax 帖子未正确传递数组

标签 javascript c# jquery ajax asp.net-mvc

我有一个简单的模式,它使用 select2 从服务器获取产品列表。用户可以选择多项产品并点击确定以优化搜索。

我的以下设置从模式中获取数据,并使用与 JS 尝试通过 ajax 调用发送的内容相匹配的强类型 View 模型对 Controller 操作执行 ajax 调用。

Ajax :

var exploreFilters = {
    "type" : exploreType,
    "products" : $('#s2id_select2-products').select2('data'),
    "locations" : $("#page-report__data").data("criteria__locations"),
    "companies" : $("#page-report__data").data("criteria__companies"),
    "usertypes" : $("#page-report__data").data("criteria__usertypes"),
    "groupusers" : $("#page-report__data").data("criteria__groupusers"),
    "datestart" : $("#page-report__data").data("criteria__datestart"),
    "dateend" : $("#page-report__data").data("criteria__dateend")
};

$.ajax({
    dataType: "html",
    type: "POST",
    url: "/Report/Group/FilteredView",
    data: exploreFilters,
    success: function(html) {
        if($.trim(html) === "")
            $targetSection.html('<div class="page-report__empty">No data found.  Please adjust your search filters and try again.</div>');
        else
            $targetSection.html(html);
    },
    error: function(xhr, text, err) {
        if(text === "timeout")
            $targetSection.html('<div class="page-report__empty">The request timed out.  Please try again.</div>');
        else
            $targetSection.html('<div class="page-report__empty">There has been an error.</div>');
    }
});

就在 ajax 调用转到 Controller 之前,我检查了 exploreFilters 的内容和结构: exploreFilters content and structure

这是表单数据在 POST 请求中的样子:

Form data

另一方面,我得到了一个 Controller ,它采用一个结构类似于 exploreFilters 的强类型参数:

public ActionResult FilteredView(ReportCriteriaViewModel criteria)
{
    throw new NotImplementedException();
}

还有我的强类型 View 模型:

public class ReportCriteriaViewModel
{
    public ProductViewModel[] Products { get; set; }
    public string[] Locations { get; set; }
    public string[] Companies { get; set; }
    public string UserTypes { get; set; }
    public string GroupUsers { get; set; }
    public string DateStart { get; set; }
    public string DateEnd { get; set; }
}

public class ProductViewModel
{
    public Guid Id { get; set; }
    public string Text { get; set; }
}

一旦 Controller 操作被命中,我可以看到 DateStart 和 DateEnd 已成功绑定(bind),但不是我的产品列表。

inspecting data bound to strongly typed view

我无法更改 json 请求的数据类型,它必须是 html,因为我的 Controller 操作将返回 html。

我试过更改 Id 和 Text 的大写,JSON.stringify(这实际上使日期不再绑定(bind))

我做错了什么?

最佳答案

尝试在您的 Ajax 请求中添加 contentType: "application/json"

$.ajax({
    ...
    contentType: "application/json",
    ...
});

关于javascript - MVC .NET 上的 ajax 帖子未正确传递数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25212591/

相关文章:

c# - 如何遍历物理文件夹并在 C# 中读取叶文件

javascript - 在文档上使用removeEventListener 不起作用?

javascript - 在嵌套网格的 JqWidgets 上下文菜单中面临双重发布问题

javascript - 如何在没有数据时隐藏选择选项

javascript - jQuery .closest 返回未定义

javascript - JQUERY 自动完成功能在 chrome 和 firefox 中工作,但在 IE 中不起作用

javascript - 输入最后一位数字后自动提交

javascript - 如果调用是在 AJAX 中进行的,如何检测并仅允许特定的 url 访问 Flask API?

c# - 如何检查Web服务器上是否存在文件

c# - 注册 Controller 和托管服务时使用 InstancePerLifetimeScope 或 InstancePerDependency?