Я портирую приложение ASP.net Web Forms на MVC.
Приложение использует AJAX с помощью Ajax-enabled WCF Web service
и asp:ScriptManager
. Я отправляю массив объектов на обслуживание, он прекрасно с этим справляется. Пример кода,
<script type="text/javascript">
$().ready(function () {
var ser = new Services.TasksService();
$('#tasks').tasksgrid(
'newTaskName',
'createTask',
'submitData',
loadData,
submitData,
deleteData
);
function loadData(callback) {
return ser.GetAllTasks(callback, null, null);
}
function submitData(data, callback) {
return ser.Submit(data, callback, null, null);
}
function deleteData(data, callback) {
return ser.Delete(data, callback, null, null);
}
}
);
</script>
Код службы поддержки WCF:
[ServiceContract(Namespace = "Services")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class TasksService
{
[OperationContract]
public IList<Task> GetAllTasks()
{
//Code..
}
[OperationContract]
public void Submit(IList<Task> tasks)
{
//Code..
}
[OperationContract]
public void Delete(IList<Task> tasks)
{
//Code..
}
}
Метод Submit / Delete, получает объекты Array of Tasks. Я динамически создаю этот массив в скрипте на стороне клиента и просто помещаю его в соответствующий Services.TasksService
(без вызова $ .toJSON или JSON.stringly, ничего подобного). Инфраструктура WCF прекрасно справляется с этим, и я всегда получаю правильный объект на сервере.
Теперь я избавляюсь от службы WCF и пытаюсь сделать то же самое с классом Controller. GetAllTasks были в порядке ... но я полностью пропустил "получение" методов данных.
В контроллере у меня есть,
[HttpPost]
public JsonResult Submit(IList<Task> tasks)
{
На клиенте,
function submitData(data, callback) {
$.post('/Tasks/Submit', JSON.stringify(data), callback, 'json');
}
Но все, что я пробовал, я всегда получаю в качестве объекта задач ноль (то есть данные не связаны).
Я видел пост Фила Хаака об этом, но хотел бы по возможности избежать использования каких-либо дополнительных сборок.