所以我有一个自定义类:
public class CompanyInfo
{
public int CompanyID { get; set; }
public BasicInfo BasicInfo { get; set; }
public EmployeesInfo EmployeesInfo { get; set; }
...
}
在我看来,我想将数据发送回我的控制器功能:
[HttpPost]
public JsonResult SaveCompanyInfoWithOutBalanceSheet(CompanyInfo model)
{
...
}
Ajax函数是这样的:
function onSubmit(){
basicInfoFormData = $("#basicInfoForm").serialize();
employeesInfoFormData = $("#employeesInfoForm").serialize();
var companyInfoData =
{
basicInfoFormData, employeesInfoFormData
};
$.ajax({
type: "POST",
url: '@Url.Action("SaveCompanyInfoWithOutBalanceSheet")',
dataType: "json",
data: JSON.stringify(companyInfoData),
success: function (result) {
if (result.Success)
secondStepOnSubmit();
else
submitError();
}
});
}
当我运行ajax函数时,我的控制器函数会成功接收HTTP请求并将其转换为我的自定义类" CompanyInfo
"。但是,这里有一个问题。最后一个属性cof
我的" BasicInfo
" class是string
,属性的名称是" Website
"。如果我在控制器方法中设置断点,我可以看到绑定器没有反序列化" Website
"财产正确。以下是Binder分配给" Website
"的价值。属性:
"test_email_address \",\"employeesInfoFormData\":\"EmployeesInfo.ID=0"
" test_email_address
"是我为#34; WebSite
"输入的内容但不知何故,活页夹包括" EmployeesInfo
"也是 JSON string
的一部分。有什么想法吗?
答案 0 :(得分:1)
当您希望C#Action(SaveCompanyInfoWithOutBalanceSheet
)需要参数作为模型(CompanyInfo
)时,您应该使用数据传递整个模型 - 模型的attribute
值不是很少。
例如,如果您的Model
有三个properties
,如下所示
public class CompanyInfo
{
public int CompanyID { get; set; }
public BasicInfo BasicInfo { get; set; }
public EmployeesInfo EmployeesInfo { get; set; }
}
您的Controller
Action
如下所示
[HttpPost]
public JsonResult SaveCompanyInfoWithOutBalanceSheet(CompanyInfo companyInfo)
{
...
}
因此,在javascript函数中,您需要获取已分配给html控件的值。 生成模型的正确结构并将其作为参数传递。
在您的模型中,它包含一个int
属性和两个单独的classes
另外两个attributes
。因此,当您发送参数时,请创建正确的结构并传递它。它应该工作
function onSubmit(){
var companyIdValue = $("#yourcompanyidtextbox").val();
//Ensure the basicInfoFormData contains all the property values of BasicInfo class
var basicInfoFormData = $("#basicInfoForm").serialize();
//Ensure the employeesInfoFormData contains all the property values of EmployeesInfo class
var employeesInfoFormData = $("#employeesInfoForm").serialize();
var companyInfo =
{
CompanyID : companyIdValue,
BasicInfo : basicInfoFormData,
EmployeesInfo : employeesInfoFormData
};
$.ajax({
type: "POST",
contentType: 'application/json; charset=utf-8',
url: '@Url.Action("SaveCompanyInfoWithOutBalanceSheet")',
data: JSON.stringify(companyInfo),
success: function (result) {
if (result.Success)
secondStepOnSubmit();
else
submitError();
},
error: function (request, textStatus, errorThrown) {
alert("Status: " + textStatus + "Error: " + errorThrown);
}
});
}
希望你清楚。