我在这里做错了什么?
我可以成功将4个bool参数传递给控制器。现在我想将一个int数组传递给我的控制器,但是它不起作用 - 我在示例中留下了我的工作代码(注释掉了)所以你可以看到我没有改变那么多 - 我想我是错过了一些简单的东西(事后是17:44 !!!)。我可以看到使用alert(rolesChecked);
语句填充数组:
var rolesChecked = [];
$('[type="checkbox"].role-checkbox').each(function () {
if (this.checked)
{
rolesChecked.push($(this).val());
}
});
alert(rolesChecked);
//var administrator = $('#cbAdministrator').is(":checked");
//var manager = $('#cbManager').is(":checked");
//var technician = $('#cbTechnician').is(":checked");
//var transcriber = $('#cbTranscriber').is(":checked");
if (rolesChecked.count > 0){//administrator || manager || technician || transcriber) {
$.ajax({
url: '@Url.Action("GetFutureHolidays", "Employee")',
type: 'GET',
dataType: 'json',
// we set cache: false because GET requests are often cached by browsers
// IE is particularly aggressive in that respect
cache: false,
data: {
roleIdXXXs: rolesChecked
//includeAdministrator: administrator,
//includeManager: manager,
//includeTechnician: technician,
//includeTranscriber: transcriber
},
success: function (data) {
//do something...
}
});
}
控制器操作:
public string GetFutureHolidays(List<int> roleIdXXXs)//bool includeAdministrator, bool includeManager, bool includeTechnician, bool includeTranscriber)
{
//do something
}
使用旧代码,控制器操作将被命中...使用数组,它永远不会被击中......我在这里缺少什么......
另外,我认为List<int> roleIdXXXs
应该没问题,但我也尝试List<string>
,int[]
和string[]
以防万一!{/ p>
答案 0 :(得分:12)
您需要添加traditional: true
ajax选项以将数组回发到集合
$.ajax({
url: '@Url.Action("GetFutureHolidays", "Employee")',
type: 'GET',
dataType: 'json',
cache: false,
data: { roleIdXXXs: rolesChecked },
traditional: true, // add this
success: function (data) {
}
});
另请参阅answer to this question以获取有关选项的作用及其生成的表单数据的更多详细信息。
答案 1 :(得分:1)
在if语句中,使用rolesChecked.length
而不是rolesChecked.count答案 2 :(得分:1)
您无法从Ajax提交这样的列表,您正在使用的过程中最快的修复是使用序列化 - 脱盐过程,您可以将其作为
发送
roleIdXXXs: JSON.stringify(rolesChecked)
on Action:
public ActionResult GetFutureHolidays(string rolesChecked)
{
var test = new JavaScriptSerializer().Deserialize<List<int>>(rolesChecked);
}
答案 3 :(得分:0)
你应该在你的AJAX调用lice上使用JSON.stringify():
FForm.prototype._validade = function() {
var fld = this.fields[this.current],
input = fld.querySelector( 'input' ) || fld.querySelector( 'textarea' ) || fld.querySelector( 'select' ),
error,
data = {'form_class': this.form_class, 'field': fld.querySelector('input').name, 'data': fld.querySelector('input').value},
$this = this;
$.ajax({
type: "POST",
url: '/core/validate_field',
data: data,
dataType:'json',
}).done(function(data){
if (data['status'] === 'error') {
error = data['message'];
$this._showError( error );
return false;
}
return true;
}
)
}