将多个数据作为列表传递给MVC中的View

时间:2016-08-22 04:11:17

标签: asp.net-mvc linq view

如何将LINQ数据传递给View。我使用了下面的代码,但它引发了转换错误。

namespace WebApplication1.DataContext
{
    public class Repositary
    {
        public  ProductMaster productMaster { get; set; }
        public  ProductDetail productDetail { get; set; }
    }
}`

行动方法: -

public ActionResult ProductMasterWithDetails()
{
    Model1 db=new Model1();
    Repositary rep = new Repositary();
    var varResult= from pm in db.ProductMasters join pd in db.ProductDetails on pm.ProductId equals pd.ProductId select new  { pm.ProductId, pm.ProductName, pd.Price, pd.ManufactureBy };

    ViewBag.result = varResult.ToList();

    return View();
}
  

错误:无法初始化类型' WebApplication1.DataContext.Repositary'   使用集合初始值设定项,因为它没有实现   ' System.Collections.IEnumerable'
  C:\ Users \ msnsh \ onedrive \ documents \ visual studio   2013 \ Projects \ WebApplication1 \ WebApplication1 \ Controllers \ ProductController.cs 55 141 WebApplication1

在视图中

@foreach (var result in  ViewBag.result){

}

我有两个模型类如下。

namespace WebApplication1.DataContext
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Data.Entity.Spatial;

    [Table("ProductMaster")]
    public partial class ProductMaster
    {
        public ProductMaster()
        {
            ProductDetails = new HashSet<ProductDetail>();
        }

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.None)]
        public int ProductId { get; set; }

        [StringLength(50)]
        public string ProductName { get; set; }

        public virtual ICollection<ProductDetail> ProductDetails { get; set; }
    }
}

namespace WebApplication1.DataContext
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Data.Entity.Spatial;

    public partial class ProductDetail
    {
        public int? Price { get; set; }

        [StringLength(50)]
        public string ManufactureBy { get; set; }

        public int? ProductId { get; set; }

        [Key]
        public int ProdDetailsId { get; set; }

        public virtual ProductMaster ProductMaster { get; set; }
    }
}

如果我们有两个模型类,那么如何替换下面的单个模型命名空间?

@model IEnumerable

我无法创建如下所示的单个类,因为我的模型有两个类,

public Class ProductCustomModel
   {
        public int ProductId { get; set; }
        public int ProductName { get; set; }
        public int Price { get; set; }
        public int ManufactureBy { get; set; }
   }

这是我的Model1类。

namespace WebApplication1.DataContext
{
    using System;
    using System.Data.Entity;
    using System.ComponentModel.DataAnnotations.Schema;
    using System.Linq;
    using System.Data.Entity.Spatial;
    public partial class Model1 : DbContext
    {
        public Model1()
            : base("name=Model1")
        {
        }

        public virtual DbSet<ProductDetail> ProductDetails { get; set; }
        public virtual DbSet<ProductMaster> ProductMasters { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<ProductDetail>()
                .Property(e => e.ManufactureBy)
                .IsUnicode(false);

            modelBuilder.Entity<ProductMaster>()
                .Property(e => e.ProductName)
                .IsUnicode(false);
        }
    }
}

2 个答案:

答案 0 :(得分:1)

如果你在varResult中获得的数据超过了你应该尝试的数据,

在Conroller中。

    Model1 db=new Model1();

    var varResult= (from pm in db.ProductMasters join pd in db.ProductDetails on pm.ProductId equals pd.ProductId select new  { pm.ProductId, pm.ProductName, pd.Price, pd.ManufactureBy }).ToList();
    return View("path to the view",varResult);

在视图中

    @model ModelName
    @foreach (var result in  Model){

    }

答案 1 :(得分:0)

您需要将ViewBag更改为customModel/ClassList会将namespace WebApplication1.DataContext { public class Repositary { public ProductMaster productMaster { get; set; } public ProductDetail productDetail { get; set; } } public Class ProductCustomModel { public int ProductId { get; set; } public int ProductName { get; set; } public int Price { get; set; } public int ManufactureBy { get; set; } } } 发送到您的视图。

<强>型号:

public ActionResult ProductMasterWithDetails()
{
    Model1 db=new Model1();
    Repositary rep = new Repositary();
    var varResult= from pm in db.ProductMasters join pd in db.ProductDetails on pm.ProductId equals pd.ProductId select new  { pm.ProductId, pm.ProductName, pd.Price, pd.ManufactureBy };

    //Make your List Here like this and add the values in it.
    List<ProductCustomModel> productCustomModelList = new List<ProductCustomModel>(); 
    Foreach(ProductCustomModel item in varResult)
    {
          ProductCustomModel singleData = new ProductCustomModel();

          ProductId = item.ProductId,
          ProductName = item.ProductName,
          Price = item.Price,
          ManufactureBy = item.ManufactureBy

          productCustomModelList.Add(singleData);
    }
    return View(productCustomModelList);

将您的操作方法更改为:

@model IEnumerable<WebApplication1.DataContext.ProductCustomModel>
@foreach (var result in  Model){
    //.. operations
}

}

在视图(.cshtml)

import os

from django.utils.translation import ugettext_lazy as _

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

DEBUG = True

ALLOWED_HOSTS = []

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'polls.apps.PollsConfig'
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'sampleproject.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'django.template.context_processors.i18n'
            ],
        },
    },
]

WSGI_APPLICATION = 'sampleproject.wsgi.application'

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

LANGUAGES = [
    ('fi-FI', _('Finnish')),
    ('en', _('English')),
]

LOCALE_PATHS = [
    os.path.join(BASE_DIR, 'locale'),
]