AJAX 对象将 null 传递给控制器



美好的一天,

我处于智慧的尽头,我知道这可能是我错过的简单东西。搜索和搜索后,我似乎找不到适合我的解决方案。我的问题是我正在尝试使用 JSON 通过 AJAX 将信息从输入字段传递到控制器。

这是我的 C# 模型的代码

public partial class EgInput
{
public string DisplayId { get; set; }
public string EgUid { get; set; }
public double Quantity { get; set; }
public string Quality { get; set; }
public string Required { get; set; }
public string MaxAmount{ get; set; }
}

这是我的 C# 控制器操作的代码

public String SaveTest(EgInput obj)
{
Debug.WriteLine("Uid Value: "+ obj.DisplayId);
return (obj.DisplayId);
}

以下是输入字段

<input asp-for="DisplayId" class="form-control" />
<span asp-validation-for="DisplayId" class="text-danger"></span>

<input asp-for="EgUid" class="form-control" />
<span asp-validation-for="EgUid" class="text-danger"></span>

<table>
<tr id="eg_row">
<td>
<input asp-for="Quantity" class="form-control" />
<span asp-validation-for="Quantity" class="text-danger"></span>
</td>

<td>
<input asp-for="Quality" class="form-control" />
<span asp-validation-for="Quality" class="text-danger"></span>
</td>

<td>
<input asp-for="Required" class="form-control" />
<span asp-validation-for="Required" class="text-danger"></span>
</td>

<td>
<input asp-for="MaxAmount" class="form-control" />
<span asp-validation-for="MaxAmount" class="text-danger"></span>
</td>

</tr>
</table>
<button type="button" id="save_test">Save</button>

这是我正在执行的JavaScript。

$('#save_test').on("click", function () {

$("tr").each(function () {
if ($(this).is("#eg_row")) {
var did = $("#DisplayId").val();
var eid = $("#EgUid").val();
var quantity = $(this).find("#Quantity").val();
var quality = $(this).find("#Quality").val();
var req = $(this).find("#Required").val();
var max = $(this).find("#MaxAmount").val();

var obj = JSON.stringify({
"DisplayId": did,
"EgUid": eid,
"Quantity": quantity,
"Quality": quality,
"Required": req,
"MaxAmount": max
});
console.log("clicked");
$.ajax({
type: "POST",
dataType: "json",
data: obj,
contentType: 'application/json',
url: '/Index/SaveTest',
success: function (msg) {
alert(msg);
}
}); 
}
});
});

我已经控制台记录了 JSON 数组,以查看确实有从字段中提取的值。我已经测试了控制器中的正确操作是否被调用,并将其返回更改为消息以了解它已成功处理。在 C# 中使用 is(( 函数,它表示对象确实是类型。但是,使用调试控制台验证对象中的信息时,这些值始终为 null。提前感谢您提供的任何帮助。

就像我说的,这是我的问题的一个相当简单的解决方案。由于某种原因,JSON 字符串未被传递。我尝试使用 [FromBody] 属性或 [FromUri],但对象仍然为空。因此,我尝试只是简单地直接传递Javascript对象,并且没有使用json和传输的数据。

下面修订的 JavaScript 代码

$('#save_test').on("click", function () {

$("tr").each(function () {
if ($(this).is("#eg_row")) {
var did = $("#DisplayId").val();
var eid = $("#EgUid").val();
var quantity = $(this).find("#Quantity").val();
var quality = $(this).find("#Quality").val();
var req = $(this).find("#Required").val();
var max = $(this).find("#MaxAmount").val();

var obj = {
"DisplayId": did,
"EgUid": eid,
"Quantity": quantity,
"Quality": quality,
"Required": req,
"MaxAmount": max
};
console.log("clicked");
$.ajax({
type: "POST",
dataType: "html",
data: obj,
contentType: 'application/x-www-form-urlencoded',
url: '/Index/SaveTest',
success: function (msg) {
alert(msg);
}
}); 
}
});
});

最新更新