如何解决当我在ASP.NET Core Web应用程序中由jQuery设置复选框时,为什么复选框的值不发布到控制器中?
我在Web应用程序中使用KendoUI for ASP.NET Core。我有一个特定列的自定义编辑器,当某人在网格中编辑数据时使用该编辑器。网格设置为auto-sync="true"
,以便用户可以编辑单元格中的数据并自动提交更改。
自定义编辑器中是一个复选框,我根据某些条件使用jQuery对其进行了设置。即使此功能有效并且复选框已“选中”,控制器接收的值始终为false
。
这是我的网格。
/ Views / Home / Index
<kendo-grid name="HomePositionGrid" deferred="false">
<datasource type="DataSourceTagHelperType.Ajax" auto-sync="true">
<transport>
<read url="/Position/ReadPositions" />
<update url="/Position/UpdatePosition" />
</transport>
<schema>
<model id="Id">
<fields>
<field name="Id" editable="false" />
</fields>
</model>
</schema>
</datasource>
<editable mode="incell" />
<columns>
<column field="Name" title="Name" />
<column field="ExpectedOffhire" editor="expectedOffhireEditor" title="ExpectedOffhire" />
</columns>
</kendo-grid>
如您所见,这是一个标签帮助程序网格,其中auto-sync
设置为true
,并且定义了一个自定义编辑器expectedOffhireEditor
。
这是编辑器
wwwroot / js / expectedOffhireEditor
function expectedOffhireEditor(container,options) {
$('<input name="' + options.field + '" id="' + options.field + '" />')
.appendTo(container)
.kendoDateTimePicker({
valuePrimitive: true
});
$('<input name="PPT" id="PPT" />')
.appendTo(container)
.kendoDropDownList({
dataTextField: "text",dataValueField: "value",optionLabel: "-- Select --",change: setPromptDate,dataSource: [
{
value: 1,text: "Prompt"
},{
value: 2,text: "Prompt AM"
},{
value: 3,text: "Prompt PM"
}
]
});
$('<input type="checkbox" id="Prompt" name="Prompt" for="Prompt" />').appendTo(container)
}
此处创建了三个输入,第一个是DateTime选择器,第二个是下拉列表,第三个是基本复选框。当用户从下拉列表中选择一个选项时,必须将复选框设置为checked
,该复选框由名为setPromptDate
的更改事件处理。
setPromptDate
function setPromptDate(e) {
$('#Prompt').prop("checked",true);
//shortened for brevity ...
}
当数据从网格发布并到达控制器时,该复选框的值始终为false
,我尝试了多种方式来实现,但prompt
复选框并未发布。如果我自己使用鼠标选中了该框,则该值将显示为“ true”,这与通过jquery设置播放状态不佳有关。
有没有人遇到过这件事,谁能弄清楚出什么问题了?
解决方法
正如您所说的“如果我自己用鼠标选中该框,该值将发布为true
”。我猜测setPromptDate
不能按预期工作。更具体地说,$('#Prompt').prop("checked",true)
没有正确更改input type='checkbox'
HTML标记。我会尝试以下方法:
-
$('#Prompt').checked
-
$('#Prompt').prop('checked')
-
$('#Prompt').attr('checked')
-
$('#Prompt').attr('checked','true')
或者通过其他一些方式到达<input type="checkbox" checked>
。
根据您的情况,请尝试以下操作:
change: function(options){ return setPromptDate(options); },
功能:
function setPromptDate(options) {
$('#Prompt').attr('checked','true');
// The rest of process...
}
如果不需要,可以忽略参数“ options”
,发布后复选框的value
不是true
或false
,这是您将value=""
属性设置为选中状态的任何内容;否则未设置。
我看到您没有设置复选框的值,而我猜测它是设置为""
,这是错误的,还是默认为false
?值得测试。
请先尝试上述操作,但是,如果这对您不起作用,请尝试以下答案:https://stackoverflow.com/a/63418577/1410567
此处复制:
$('form').on('change',':checkbox',function () {
if (this.checked) {
$(this).val(true);
}
else {
$(this).val(false);
}
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。