Javascript 在ASP.NET-MVC5应用程序中通过$.Ajax Post方法始终发布false的@Html.checkbox问题
我试图通过jQuery Ajax函数以JSON格式发布数据,这很好,但是我有bool值,并且使用html.checkBoxFor,即使我检查它,它也总是发布false。我有javaScript中的更新代码,如果检查与否,我会强制相应地更改隐藏的输入值,并且我可以在调试中看到,当单击时,发布的是true,但在控制器端仍然收到false。在附加的屏幕截图中,您可以看到控制器上的post正确值,但不是正确值 模型类属性 剃刀代码 jqueryajax方法,我在哪里发布 附加物业清单Javascript 在ASP.NET-MVC5应用程序中通过$.Ajax Post方法始终发布false的@Html.checkbox问题,javascript,razor,asp.net-mvc-5,jquery-ajaxq,checkboxfor,Javascript,Razor,Asp.net Mvc 5,Jquery Ajaxq,Checkboxfor,我试图通过jQuery Ajax函数以JSON格式发布数据,这很好,但是我有bool值,并且使用html.checkBoxFor,即使我检查它,它也总是发布false。我有javaScript中的更新代码,如果检查与否,我会强制相应地更改隐藏的输入值,并且我可以在调试中看到,当单击时,发布的是true,但在控制器端仍然收到false。在附加的屏幕截图中,您可以看到控制器上的post正确值,但不是正确值 模型类属性 剃刀代码 jqueryajax方法,我在哪里发布 附加物业清单 var Ad
var AdditionalTenentList=新数组();
$(.additionalTententUWLID”)。关于(“更改”,函数(){
var StudentUWLID=$(this.val();
$(this.attr('id',StudentUWLID);
$.ajax({
url:'@url.Action(“GetStudentRecordByID”,“StudentProfile”),
类型:“POST”,
数据类型:“JSON”,
数据:{u GivenStudentUWLID:StudentUWLID},
缓存:false
}).done(函数(数据、文本状态、jqXHR){
如果(data.RecordStatus==“NotAvailable”)
{
警报(“错误”);
}
else if(data.RecordStatus==“recordFound”)
{
//警报(数据、响应);
var paraedData=JSON.parse(data.Response);
额外的tenentlist.push(StudentUWLID);
…我剩下的代码
您的问题是,您发布的SecureEntityProperty
属性值数组和布尔值
属性不能绑定到数组
如果选中复选框,您应该在“发布”选项卡中看到的是
....
_RentingApplicationModel.SecureEntireProperty: true
_RentingApplicationModel.SecureEntireProperty: false
....
如果未选中,则只显示第二个属性。DefaultModelBinder
读取第一个属性的值(true
)并设置属性。它忽略与同一属性匹配的任何后续值
我假设这是因为您使用了.serializeObject()
。这不是一个本机jQuery方法,因此您可能使用插件或编写了自己的函数(可能类似?)。在任何情况下,它都不会生成正确的post值。请改为使用jQuery.serialize()
函数序列化表单值。由于您还发布了一个额外的值数组,因此需要将代码修改为
var data = $('#CreateStudentRentingApplicationForm').serialize() + '&' + $.param({ 'TenentJSONList': AdditionalTenentList }, true);
$.ajax({
url: formURL,
type: "POST",
dataType: "application/json",
data: data,
}).done(function (data, textStatus, jqXHR) {
我也曾面临过这个问题,后来我遇到了 我添加了@Name属性,如下所示
@Html.CheckBoxFor(m => m.IsPresent, new { @Name = "customName"})
此语句覆盖使用@Html.CheckBoxFor生成的名称
如果您看到@html.CheckBoxFor生成的html代码,您将看到生成的两个输入标记。
因此,我刚刚删除了@Name属性,并能够使用Ajax提交请求,如下所示:
if ($(this).valid()) {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
traditional: true,
success: function (data) {
//.........
}
现在,我可以通过复选框接收提交的值。为什么要更新隐藏的输入(不要这样做-它应该发回
false
!)和[必需]
属性实际上不是必需的-一个bool
只有两个值,它要么是true
要么是false
,永远不会null
。我在最初的尝试中没有更改隐藏的输入值,但我总是得到false,认为它可以帮助我…我不确定我在这里做错了什么!我将在后面查看稍后详细介绍,但您能尝试serialize()
而不是serializeObject()
好的,我会在一分钟内尝试。首先感谢您的帮助!我要将.serializeObject()更改为serialize()我得到的是#CreateStudentRentingApplicationForm的空值,但是我得到的是TenentJSONListOK的值,我想我知道另一个问题是什么。你能试试data:JSON.stringify($(“#CreateStudentRentingApplicationForm”).serialize(),
,看看这是否绑定到你的模型。或者数据:$(“#createstudentrentingaapplicationform”)。序列化(),
并删除contentType:“application/json;charset=utf-8“,
。这两个选项中的一个应该绑定您的模型。好的,我已经尝试了以下操作并设法用真值传递模型数据,但现在我得到了AdditionalEntentList的空值…………数据:JSON.stringify({enentJSONList:AdditionalEntententList,ApplicationModelData:$(“#CreateStudentEntingApplicationForm”).serialize()),您尝试了上面两个选项中的哪一个?或者两者都起作用了(我知道AdditionalTenentList
将为空-它只是用于测试:)您还需要显示AdditionalTenentList
是什么(用于构建它的jquery代码)
<script type="text/javascript">
var AdditionalTenentList = new Array();
$(".additionalTententUWLID").on("change", function () {
var StudentUWLID = $(this).val();
$(this).attr('id', StudentUWLID);
$.ajax({
url: '@Url.Action("GetStudentRecordByID", "StudentProfile")',
type: "POST",
dataType: "JSON",
data: { _GivenStudentUWLID: StudentUWLID },
cache: false
}).done(function (data, textStatus, jqXHR) {
if (data.RecordStatus == "NotAvailable")
{
alert("error");
}
else if(data.RecordStatus=="recordFound")
{
// alert(data.Response);
var paraedData = JSON.parse(data.Response);
AdditionalTenentList.push(StudentUWLID);
....my rest of code
</script>
....
_RentingApplicationModel.SecureEntireProperty: true
_RentingApplicationModel.SecureEntireProperty: false
....
var data = $('#CreateStudentRentingApplicationForm').serialize() + '&' + $.param({ 'TenentJSONList': AdditionalTenentList }, true);
$.ajax({
url: formURL,
type: "POST",
dataType: "application/json",
data: data,
}).done(function (data, textStatus, jqXHR) {
@Html.CheckBoxFor(m => m.IsPresent, new { @Name = "customName"})
if ($(this).valid()) {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
traditional: true,
success: function (data) {
//.........
}