I have a form with data listed in a table structure
@model IEnumerable<myType>
@Html.AntiForgeryToken()
@using (Ajax.BeginForm("Save", "NOC", null, ajaxopts, new { @encType = "multipart/form-data", @id = "myform", @name = "myform" }))
{
<table>
<tr>
<td><input type="hidden" name="myType[0].ID" id="myType[0].ID" value="16" /></td>
<td><input type="text" name="myType[0].Name" id="myType[0].Name" value="Jim" /></td>
<td><input type="checkbox" name="myType[0].Selected" id="myType[0].Selected" checked /></td>
</tr>
<tr>
<td><input type="hidden" name="myType[1].ID" id="myType[1].ID" value="17" /></td>
<td><input type="text" name="myType[1].Name" id="myType[1].Name" value="Bob" /></td>
<td><input type="checkbox" name="myType[1].Selected" id="myType[1].Selected" /></td>
</tr>
</table>
<button id="process" value="Save" class="btn btn-primary">Save</button>
}
In Chrome I can see that in the Form Data section the list of data being posted to the controller....
myType[0].ID: 16
myType[0].Name: Jim
myType[0].Selected: on
myType[1].ID: 17
myType[1].Name: Bob
but in the controller I get null
[HttpPost]
public async Task<ActionResult> SaveData(IEnumerable<myType> model)
{
return Json("Hi");
}
Also if I look in the preview on Chrome Dev Tools I see "Hi" in the Preview returned from the Controller.
My Javascript looks like this
$("#process").on("click", function (event){
event.preventDefault();
var formData = $("#myForm").serialize();
$.ajax({
url: url,
type: "POST",
data: formData
})
});
model is
public class myType
{
public int ID { get; set; }
public string Name { get; set; }
public bool Selected { get; set; }
}
There are no javascript errors showing, just no data to the controller?
any help would be hugely appreciated.
Thanks