1

我是 MVC3 的新手(这就是为什么我买了一本关于它的书,这就是我现在有这个问题的原因!),如果有一个明显的答案,我深表歉意!

我正在关注一个在 MVC3 中构建购物车的简单示例。这本书提倡使用 Ninject 进行依赖注入,我也是新手。一个模型看起来很简单,在本例中为 Product,但在此基础上,我正在努力添加第二个模型并将其显示在显示 Product 模型的同一视图中。我尝试过使用视图模型,但我发现的所有示例都将几个类包装到一个模型中,我不太清楚如何在我的代码中实现它。

班上:

public class Product
{
    public int ProductId {get;set;}
    public string Name {get;set;}
}

摘要库:

public interface IProductRepository
{
    IQueryable<Product> Products {get;}
}

将模型与数据库关联的类:

public class EFDbContext : DbContext
{
    public DbSet<Product> Products {get;set;}
}

实现抽象接口的产品存储库:

public class EFProductRepository : IProductRepository
{
    private EFDbContext context = new EFDbContext();

    public IQueryable<Product> Products
    {
        get {return context.Products;}
    }
}

Ninject 将 IProductRepository 绑定到 ControllerFactory 类中的 EFProductRepository。

控制器:

public class ProductController : Controller
{
    private IProductRepository repository;

    public ProductController(IProductRepository productRepository)
    {
        repository = productRepository;
    }

    public ViewResult List()
    {
        return View(repository.Products);
    }
}

我的问题是将 repository.Products 传递给强类型视图;如果我需要通过另一个实体,这是非常可行的,我将如何实现这一点???

4

2 回答 2

2

您可以构建一个如下所示的 ViewModel:

public class YourViewModel
{
    public List<Product> Products { get; set; }
    public List<OtherEntity> OtherEntities { get; set; }
}

然后,您可以将存储库包装在一个服务中,该服务包含满足您的请求和/或业务逻辑所需的所有方法:

public class YourService
{
    private IProductRepository repository;

    public List<Product> GetAllProducts( )
    {
        return this.repository.Products.ToList( );
    }

    public List<OtherEntity> GetAllOtherEntites( )
    {
        return this.repository.OtherEntites.ToList( );
    }
}

最后在 Controller 中适当地填充 ViewModel

public class ProductController : Controller
{
    private YourControllerService service = new YourControllerService( );
    // you can make also an IService interface like you did with
    // the repository

    public ProductController(YourControllerService yourService)
    {
        service = yourService;
    }

    public ViewResult List()
    {
         var viewModel = new YourViewModel( );
         viewModel.Products = service.GetAllProducts( );
         viewModel.OtherEntities = service.GetAllOtherEntities( );

        return View( viewModel );
    }
}

现在您的 ViewModel 上有多个实体。

于 2012-08-12T11:27:30.620 回答
0

也许它不是直接回答您的问题,但它是连接的。

如果您正确地将模型传递给查看,则可以这样处理

@model SolutionName.WebUI.Models.YourViewModel

@Model.Product[index].ProductId
@Model.OtherEntity[index].OtherId

我知道这是旧帖子,但它可能对其他人有所帮助:)

于 2015-09-11T10:13:48.123 回答