ASP.NET MVC 2. Не удается создать экземпляр интерфейса - PullRequest
2 голосов
/ 22 сентября 2010

Я использую ASP.NET MVC 2 для своего проекта.

Я пытаюсь редактировать информацию о моем продукте, используя следующий код:

    [HttpGet]
    public ActionResult Edit(int id)
    {
        IProduct product = productService.getProductById(id);
        return View(product);
    }

IProduct и другие IEntities создаются с использованием IoC Castle Windsor. Страница для редактирования успешно загружена. В верхней части моей страницы я заявил, что страница должна Inherits = "System.Web.Mvc.ViewPage age DomainModel.Entities.IProduct ct. И это так. Но когда я пытаюсь обновить свои изменения, используя следующий код:

    [HttpPost]
    public ActionResult Edit(IProduct product)
    {
        //Whatever i did here i always get the error prevents my any actions
    }

тогда я получаю сообщение об ошибке "Невозможно создать экземпляр интерфейса."

Кто-нибудь может объяснить, почему? Извините за, вероятно, плохой английский, и спасибо за любой ответ.

1 Ответ

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

Это потому, что MVC необходимо знать конкретный тип для построения параметра вашего продукта.

Вы не можете создать экземпляр IProduct, только конкретный тип, который реализует IProduct. Самый простой способ сделать это - использовать простые конкретные типы DTO для передачи данных из представления и в представление (иногда называемое ViewModel).

Вы можете заставить ваш пример работать с типом интерфейса, если вы реализуете привязку пользовательской модели для этого типа. (По сути, это способ сообщить MVC, какой тип создавать, когда он встречает IProduct).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...