ASP.NET Core MVC控制器模型中的表单数据未序列化

3
C#模型类
public class SubCategoryTwoViewModel
{
    public long Id { get; set; }
    public string SubCatTwoName { get; set; }
    public CategoryViewModel Category { get; set; }
    public SubCategoryOneViewModel SubCatOne { get; set; }
    public string PictureUrl { get; set; }
    public List<IFormFile> File { get; set; }
    public UserViewModel AddedBy { get; set; }
    public DateTime AddedOn { get; set; }
    public UserViewModel Updated_By { get; set; }
    public DateTime? UpdatedOn { get; set; }
    public bool Active { get; set; }
}

这是CategoryViewModel。
public class CategoryViewModel
    {
        public long CategoryId { get; set; }
}

这是控制器方法。
[HttpPost]
public JsonResult AddEditSubCategoryTwo(SubCategoryTwoViewModel model)
{
}

这是一个使用表单数据序列化数据并发送至控制器方法的Ajax调用。
var ajaxUrl = ApplicationRootUrl("AddEditSubCategoryTwo", "Category");
var formData = new FormData();
var totalFiles = document.getElementById("subCatFile").files.length;

for (var i = 0; i < totalFiles; i++) {
    var file = document.getElementById("subCatFile").files[i];
    formData.append("File", file);
}

formData.append('SubCatTwoName', self.subCatTwoName());
var category = {
    CategoryId: self.selectCategory()
};

formData.append('Category', category);
var subCatOne= {
    SubCategoryOneId: self.selectCategorytwo()
};

formData.append('SubCatOne', subCatOne);
formData.append('Active', self.active());

$.ajax({
    type: "POST",
    contentType: false,
    processData: false,
    url: ajaxUrl,
    data: formData,
    dataType: "json",
    success: function (data) {
    }
});

我正在控制器中获取一些字段数据,但JavaScript值未序列化到控制器模型中。下面是一个示例的截图: Data of some field 在屏幕截图中,我得到了类别和SubCatOne字段为空。但是active,SubCatTwoName和File字段已经获得了值。我想在控制器模型对象中获取Category和SubCatOne的值。如何实现这一点?

console.log(category)会打印出什么内容? - undefined
对象 {CategoryId: 5} 这是控制台输出 - undefined
还没有尝试过 asp.net-core。你试过将 category 传递给 JSON.stringify() 吗? - undefined
是的,我也试过了,对我来说也不起作用。当我使用对象时,我遇到了问题。没有对象时,它完美地工作,你可以看到对于active、file等等... - undefined
正如Guest271314所说,你能在调用ajax调用之前在调试模式下检查Formdata的值吗?尝试放置调试器并检查我们是否将所有值传递给控制器。 - undefined
显示剩余5条评论
1个回答

3

直接添加对象是行不通的。相反,您可以通过使用正确的名称(用点号分隔属性层次结构)添加嵌套字段来利用模型绑定。例如:

formData.append('Category.CategoryId', self.selectCategory());

1
@Paul Hiles,这是否意味着我们无法通过formData发送json对象,并在asp.net core action中通过model正确处理它? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接