jquery - Ajax 请求复杂类型在 ApiController 参数中为空
问题描述
我是 ASP.NET MVC 的新手并尝试创建一个页面。我的页面有一个带有分页的搜索区域和网格视图。
PagerModel 模型是包含分页细节的常用模型。
产品页面搜索模型和寻呼机模型
public class ProductSearchModel
{
public int ClientId { get; set; }
public IList<SelectListItem> Clients { get; set; } = new List<SelectListItem>();
public int StoreId { get; set; }
public IList<SelectListItem> Stores { get; set; } = new List<SelectListItem>();
public string Title { get; set; }
public string Sku { get; set; }
public string Vendor { get; set; }
public IList<SelectListItem> Vendors { get; set; } = new List<SelectListItem>();
public string ProductType { get; set; }
public IList<SelectListItem> ProductTypes { get; set; } = new List<SelectListItem>();
public PagerModel PagingModel { get; set; } = new PagerModel();
}
public class PagerModel
{
public int PageTotal { get; set; }
public int PageIndex { get; set; }
public int PagingButtonCount { get; set; }
public int PageNumber { get; set; }
public int PageSize { get; set; }
public int PagesCount { get; set; }
public bool ShowTotalSummary { get; set; }
}
这是我的 Ajax 请求;我也尝试过使用JSON.stringify(postData)
,但它仍然无法正常工作:
function fetchData(pageNumber) {
var $loading = "<div class='loading'>Please wait...</div>";
$('#updatePanel').prepend($loading);
var clientId = $("#@Html.IdFor(model => model.ClientId)").val();
var storeId = $("#@Html.IdFor(model => model.StoreId)").val();
var title = $("#@Html.IdFor(model => model.Title)").val();
var sku = $("#@Html.IdFor(model => model.Sku)").val();
var productType = $("#@Html.IdFor(model => model.ProductType)").val();
var vendor = $("#@Html.IdFor(model => model.Vendor)").val();
var pageSize = @Model.PagingModel.PageSize;
var postData = {
clientId: parseInt(clientId),
storeId: parseInt(storeId),
title: title,
sku: sku,
productType: productType,
vendor: vendor,
pagingModel: {
pageNumber: pageNumber,
pageIndex: (pageNumber - 1),
pageSize: pageSize
}
};
debugger;
$.ajax({
type: 'POST',
dataType: 'json',
contentType: 'application/json',
url: "@(Url.Action("PopulateProductGrid", "Products"))",
data: postData,//JSON.stringify(postData),
success: function (data) {
},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus);
}
});
}
这是ProductController
行动方法。我试过没有[FromBody]
,但它不起作用:
[HttpPost]
public ActionResult PopulateProductGrid([FromBody] ProductSearchModel searchModel)
{
var productModel = GetProducts(searchModel);
var data = new {
Product = productModel.Products,
TotalPage = productModel.PagerModel.PageTotal,
PagesCount = productModel.PagerModel.PagesCount,
PagingButtonCount = productModel.PagerModel.PagingButtonCount
};
return Json(data);
}
解决方案
修复你的ajax:
$.ajax({
type: 'POST',
url: "/Products/PopulateProductGrid",
data: postData,
success: function (data) {
},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus);
}
});
如果它仍然无法正常工作,那么也修复您的数据:
删除解析
clientId: clientId,
storeId: storeId,
....
并使您的数据语法更简单,例如将您的 clientId 替换为
var clientId = $("#clientId").val();
// and so on for another data controls
如果您的视图控件中没有 id,请添加它们。
推荐阅读
- google-bigquery - 如何在 BigQuery 中按表通配符删除分区并按字符串排序
- javascript - 如何在 Firebase 实时数据库的一个 session_id 中连续保存数据?
- active-directory - 在具有 Windows 身份验证的 ASP.NET Core MVC 应用程序中使用 Active Directory 访问用户详细信息
- java - 具有现有表弹簧数据 jpa 的实体
- ios - 如何知道 XCTestExpectation 当前的履行计数
- php - 反应应用程序中的CORS问题,无法上传图像
- arrays - 如何选择数组中的值直到达到阈值?
- python - 在 aarch64 边缘设备上远程调试 python
- python - 如果组中只有一条记录,则获取超出日期时间范围的最近值
- android - 在android中将地址转换为地理坐标