Пример #4 обратной загрузки не работает в VS2010 MVC4

Код примера №4 обратной загрузки не работает.

public class FileUploadDerivedController : BackloadController
{
    // Since version 1.9 you can call the asynchronous handler method 
    public async Task<ActionResult> FileHandler()
    {            
        // Call base class method to handle the file upload asynchronously
        ActionResult result = await base.HandleRequestAsync();
        return result;
    }
}

Я получаю эту ошибку:

'Backload.Controllers.BackloadController' does not contain a definition for 'HandleRequestAsync'

Воспроизвести:

  • Используя VS2010, откройте новый проект MVC4.
  • Чтобы включить асинхронную синхронизацию в VS2010, установите VS Async CTP: http://www.microsoft.com/en-us/download/details.aspx?id=9983
  • В вашем проекте ссылка: [VS Async CTP Install]\Microsoft Visual Studio Async CTP\Samples\AsyncCtpLibrary.dll

Использование команды Package Manager

Install-Package Backload
  • Скачать примеры с: https://github.com/blackcity/Backload
  • Откройте Пример № 4 и скопируйте код из FileUploadController.cs для класса FileUploadDerivedController.

usings

using Backload.Controllers;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Backload;
using System.Threading.Tasks;

контроллер

// Change namespace to yours
namespace Backload.Examples.Example04.Controllers
{
    // For all demos below open the file  ~/Scripts/main.js and
    // change the url of the ajax call for the fileupload plugin

    // Demo 1: Derive from BackloadController and call the base class
    public class FileUploadDerivedController : BackloadController
    {
        // Since version 1.9 you can call the asynchronous handler method 
        public async Task<ActionResult> FileHandler()
        {
            // Call base class method to handle the file upload asynchronously
            ActionResult result = await base.HandleRequestAsync();
            return result;
        }
    }
}

Ошибка должна появиться в этой строке

ActionResult result = await base.HandleRequestAsync();

1 ответ

Решение

Ошибка правильная.

VS2010 с Async CTP нестабилен и, конечно, не рекомендуется для производственного использования. Обратите внимание, что даже создать эту среду разработки нелегко, поскольку Async CTP блокируется рядом обновлений Windows.

Но даже если вы используете VS2012 (т.е. с Microsoft.Bcl.Async), это все равно не будет работать, потому что async поведение не определено в ASP.NET 4.

Использовать async в MVC вы должны использовать ASP.NET 4.5 (или выше), а это означает использование VS2012.

Другие вопросы по тегам