ASP.net MVC помещает сложные данные (массив) в метод контроллера - PullRequest
0 голосов
/ 21 сентября 2010

Я портирую приложение 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');
        }

Но все, что я пробовал, я всегда получаю в качестве объекта задач ноль (то есть данные не связаны).

Я видел пост Фила Хаака об этом, но хотел бы по возможности избежать использования каких-либо дополнительных сборок.

Ответы [ 2 ]

1 голос
/ 22 сентября 2010

MVC необходимо указать, к какой переменной на стороне сервера привязывать данные.В вашем примере вы можете сделать следующее:

    function submitData(data, callback) {
    $.post('/Tasks/Submit', { tasks: data }, callback, 'json');
}
0 голосов
/ 27 ноября 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...