Asp.net mvc 2 具有接口类型的Asp.NETMVC模板帮助程序
我想使用Asp.net MVC模板帮助功能在整个应用程序中为我的对象生成标准UI,但我遇到了一个重大问题: 我不会直接将类类型从控制器传递到它们的视图中。相反,我传递接口类型。。在间接引用的项目中,模型的实际实现封装在Mongo或NHibernate特定的类中 为了便于讨论,我的对象如下所示:Asp.net mvc 2 具有接口类型的Asp.NETMVC模板帮助程序,asp.net-mvc-2,asp.net-mvc-3,Asp.net Mvc 2,Asp.net Mvc 3,我想使用Asp.net MVC模板帮助功能在整个应用程序中为我的对象生成标准UI,但我遇到了一个重大问题: 我不会直接将类类型从控制器传递到它们的视图中。相反,我传递接口类型。。在间接引用的项目中,模型的实际实现封装在Mongo或NHibernate特定的类中 为了便于讨论,我的对象如下所示: public interface IProductRepository { IProduct GetByName(string name); } public interface IProduc
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\ipproduct.ascx文件可用。此时,如果不将“ipproduct”名称硬编码到Editor.For()调用中,我似乎无法呈现该模板。我更喜欢这种类型的“约定优于配置”…模板帮助程序将使用对象的运行时类型作为名称。在这种情况下,您应该将文件命名为NHibernateProduct.ascx
如果您在设计时不知道类型的名称,那么您可以编写一个helper方法来检查对象实例,遍历特定类型正在实现的接口列表,并根据该列表返回名称。然后,您将调用适当的重写以获取字符串“templateName”参数的
EditorFor
。我决定使用实现IPProduct接口的Web项目固有的ViewModel方法。是。。。。这是行不通的,因为传递给视图的IPProduct的具体类型是未知的。