Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ASP.NET-MVC5应用程序中通过$.Ajax Post方法始终发布false的@Html.checkbox问题_Javascript_Razor_Asp.net Mvc 5_Jquery Ajaxq_Checkboxfor - Fatal编程技术网

Javascript 在ASP.NET-MVC5应用程序中通过$.Ajax Post方法始终发布false的@Html.checkbox问题

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

我试图通过jQuery Ajax函数以JSON格式发布数据,这很好,但是我有bool值,并且使用html.checkBoxFor,即使我检查它,它也总是发布false。我有javaScript中的更新代码,如果检查与否,我会强制相应地更改隐藏的输入值,并且我可以在调试中看到,当单击时,发布的是true,但在控制器端仍然收到false。在附加的屏幕截图中,您可以看到控制器上的post正确值,但不是正确值

模型类属性 剃刀代码 jqueryajax方法,我在哪里发布 附加物业清单

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) {
          //.........
     }