【发布时间】:2021-09-23 17:58:43
【问题描述】:
我有一个模型如下:
public class SearchModel
{
public List<CheckBoxResponse> Status { get; set; }
}
public class CheckBoxResponse
{
public string ItemText { get; set; }
public bool Selected { get; set; }
}
视图如下:
<div id="divSearchParams">
<div class="col-xs-12 col-sm-12 col-md-5 col-lg-5">
<div class="form-group">
<label>Status</label> <br />
@for (var i = 0; i < Model.Status.Count; i++)
{
<input type="checkbox" asp-for="@Model.Status[i].Selected" />
<label asp-for="@Model.Status[i].Selected">@Model.Status[i].ItemText</label>
<input type="hidden" asp-for="@Model.Status[i].ItemText" />
}
</div>
</div>
</div>
我的 AJAX 调用:
$(document).on("click", "#search", function () {
var model = $('#divSearchParams').find("input,select,textarea").serialize();
$.ajax({
url: targetUrl,
type: 'POST',
data: { model: model },
cache: true,
async: true,
}).done(function (result) {
}).fail(function (error) {
}).always(function () {
}
});
});
所以在序列化时,模型值为 "Status%5B0%5D.ItemText=Open&Status%5B1%5D.Selected=true"
但是,当我检查控制器中模型的值时,我看到模型中的状态值为 null。
public async Task<ActionResult> Students(SearchModel model)
{
}
我错过了什么?
【问题讨论】:
-
如果您发布序列化到此的模型,那实际上不是 JSON。那是查询字符串参数。因此,它将无法将其解析为 JSON。您可以尝试将此查询字符串附加到 targetURL:targetUrl + "?" + 模型,看看是否可行,但这可能不是您想要的?
-
@The_Outsider:JQuery 'serialize()' 方法返回一个字符串。因此,如果您将
Students()参数类型从SearchModel更改为string,您至少会看到您发送的内容。
标签: c# ajax asp.net-core