Asp.Net Mvc шаблонные помощники с типами интерфейса - PullRequest
0 голосов
/ 21 февраля 2011

Я хотел бы использовать функциональность шаблонных помощников MVC Asp.net для создания стандартного пользовательского интерфейса для моих объектов во всем приложении, но я столкнулся со значительной проблемой:

Я не передаю напрямую классТипы из моих контролеров в своих взглядах.Вместо этого я передаю типы интерфейсов .. с фактической реализацией Модели, заключенной в определенный класс Mongo или NHibernate в проекте с косвенной ссылкой.

Для обсуждения мои объекты выглядят так:

public interface IProductRepository {
    IProduct GetByName(string name);
}

public interface IProduct { 
    string Name { get; set; }
}

public class NHibernateProductRepository : IProductRepository {
    public IProduct GetByName(string name) { 
       /* NHibernate Magic here */
       return nhibernateFoundProduct;
    }
}

public class NHibernateProduct : IProduct {
    public virtual Name { get; set; }
}

public class ProductController : Controller {

    public ProductController(IProductRepository productRepo) {
       _ProductRepo = productRepo;
    }

    public ActionResult Index(string name) {
        IProduct product = _ProductRepo.GetByName(name);
        return View(product);
    }

}

Можно ли использовать типы интерфейсов с синтаксисом Editor.For ()?Есть ли какие-либо проблемы или проблемы, о которых мне нужно знать?

У меня есть файл EditorTemplate \ IProduct.ascx.В настоящее время я не могу заставить этот шаблон отображаться без жесткого кодирования имени «IProduct» в вызове Editor.For ().Я бы предпочел этот тип «Соглашения над конфигурацией» ....

Ответы [ 2 ]

0 голосов
/ 06 декабря 2012

Я решил использовать подход с родной ViewModel для веб-проекта, который реализует интерфейс IProduct.

0 голосов
/ 21 февраля 2011

Помощники шаблонов будут использовать для имени тип времени выполнения объекта.В этом случае вам следует назвать файл NHibernateProduct.ascx

Если вы не знаете имя типа во время разработки, вы можете написать вспомогательный метод, который будет проверять экземпляр объекта и обходить список интерфейсов.что конкретный тип реализует и возвращает имя на основе этого.Затем вы должны вызвать соответствующее переопределение для EditorFor, которое принимает строковый параметр "templateName".

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