C# 在同一视图中调用多个SQL表

C# 在同一视图中调用多个SQL表,c#,sql,asp.net-mvc,C#,Sql,Asp.net Mvc,我需要在一个视图中显示多个表。这似乎是一个问题,因为根据我所知,视图只允许一个模型定义。我曾尝试实施一个变通解决方案,但没有成功。 具体地说,我得到了错误消息:“传递到字典中的模型项的类型为'System.Data.Entity.DbSet1[BillingApp.Models.HEADER_RECORD]',但此字典需要'System.Collections.Generic.IEnumerable1[BillingApp.Models.tbl1join]'类型的模型项。” 景色 @model

我需要在一个视图中显示多个表。这似乎是一个问题,因为根据我所知,视图只允许一个模型定义。我曾尝试实施一个变通解决方案,但没有成功。 具体地说,我得到了错误消息:“传递到字典中的模型项的类型为'System.Data.Entity.DbSet
1[BillingApp.Models.HEADER_RECORD]',但此字典需要'System.Collections.Generic.IEnumerable
1[BillingApp.Models.tbl1join]'类型的模型项。”

景色

@model IEnumerable<BillingApp.Models.tbl1join>

@{
ViewBag.Title = "TABLE 01 DISPLAY";
Layout = "../Shared/Layout2.cshtml";    
}
@section featured2 {
<html>
<body>

~excluding tables because there are too many fields~


</body></html>   
  }
模型定义:

标题(u RECORD.cs)

namespace BillingApp.Models
{
using System;
using System.Collections.Generic;

public partial class HEADER_RECORD
{
    public int HRID { get; set; }
    public string TABLE_NUMBER { get; set; }
    public string COMPANY { get; set; }
    public string STATE_CODE { get; set; }
    public string BILL_CODE { get; set; }
    public string RECORD_TYPE { get; set; }
    public string MASK_EXTENSION_ID { get; set; }
    public string OVERPAYMENT_LIMIT { get; set; }
    public string UNDERPAYMENT_LIMIT { get; set; }
    public string REFUND_ACTION_OVR { get; set; }
    public string REFUND_ACTION_PAR { get; set; }
    public string REFUND_ACTION_RTN_PRM { get; set; }
    public string REFUND_ACTION_CNC { get; set; }
    public string EFT_PAC_OPTION { get; set; }
    public string EFT_PAC_NOTICE { get; set; }
    public string EFT_PAC_NSF_LIMIT { get; set; }
    public string PREMIUM_ROUNDING { get; set; }
    public string DB_CC_OPTION { get; set; }
    public string NSF_CHECK_LIMIT { get; set; }
    public string NSF_CHECK_OPTION { get; set; }
    public string FIRST_TERM_BILLING { get; set; }
    public string CARRY_DATE_OPTION { get; set; }
    public string ENDORSEMENT_DAYS { get; set; }
    public string DATE_METHOD { get; set; }
    public string RENEWAL_OPTION { get; set; }
    public string DROP_DAYS { get; set; }
    public string MULTI_PAY_IND { get; set; }
    public string MINIMUM_INSTALLMENT { get; set; }
    public string ENDORSEMENT_ACTION { get; set; }
    public string I_OR_S_OPTION_DAYS { get; set; }
    public string S_OPTION_PERCENT { get; set; }
    public string SERVICE_CHARGE_PREPAID { get; set; }
    public string REINSTATE_OPTION { get; set; }
    public string CASH_WITH_APPLICATION { get; set; }
    public string DB_CC_NOTICE { get; set; }
    public string DOWN_PAY_DAYS { get; set; }
    public string MONTH_BY_TERM { get; set; }
    public string LEAD_MONTHS { get; set; }
    public string INITIAL_MONTHS { get; set; }
    public string DB_CC_REJECTS { get; set; }
    public string RETURN_ENDORSEMENT_OPTION { get; set; }
    public string RETURN_SPLIT_OPTION_PERCENT { get; set; }
    public string AUTOMATED_REFUND_DAYS { get; set; }
    public string RENEWAL_OPTION_BILL_PLAN { get; set; }
    public string EFFECTIVE_DATE { get; set; }
    public string MISC_DATA { get; set; }
    public string MISC_DATA2 { get; set; }
}
}
namespace BillingApp.Models
{
using System;
using System.Collections.Generic;

public partial class HEADER_EXTENSION_RECORD
{
    public int ERID { get; set; }
    public string ETABLE_NUMBER { get; set; }
    public string ECOMPANY { get; set; }
    public string ESTATE_CODE { get; set; }
    public string EBILL_CODE { get; set; }
    public string ERECORD_TYPE { get; set; }
    public string EMASK_EXTENSION_ID { get; set; }
    public string OVERPAYMENT_TOLERANCE_PERCENT { get; set; }
    public string UNDERPAYMENT_TOLERANCE_PERCENT { get; set; }
}
}
标题\扩展名\记录.cs

namespace BillingApp.Models
{
using System;
using System.Collections.Generic;

public partial class HEADER_RECORD
{
    public int HRID { get; set; }
    public string TABLE_NUMBER { get; set; }
    public string COMPANY { get; set; }
    public string STATE_CODE { get; set; }
    public string BILL_CODE { get; set; }
    public string RECORD_TYPE { get; set; }
    public string MASK_EXTENSION_ID { get; set; }
    public string OVERPAYMENT_LIMIT { get; set; }
    public string UNDERPAYMENT_LIMIT { get; set; }
    public string REFUND_ACTION_OVR { get; set; }
    public string REFUND_ACTION_PAR { get; set; }
    public string REFUND_ACTION_RTN_PRM { get; set; }
    public string REFUND_ACTION_CNC { get; set; }
    public string EFT_PAC_OPTION { get; set; }
    public string EFT_PAC_NOTICE { get; set; }
    public string EFT_PAC_NSF_LIMIT { get; set; }
    public string PREMIUM_ROUNDING { get; set; }
    public string DB_CC_OPTION { get; set; }
    public string NSF_CHECK_LIMIT { get; set; }
    public string NSF_CHECK_OPTION { get; set; }
    public string FIRST_TERM_BILLING { get; set; }
    public string CARRY_DATE_OPTION { get; set; }
    public string ENDORSEMENT_DAYS { get; set; }
    public string DATE_METHOD { get; set; }
    public string RENEWAL_OPTION { get; set; }
    public string DROP_DAYS { get; set; }
    public string MULTI_PAY_IND { get; set; }
    public string MINIMUM_INSTALLMENT { get; set; }
    public string ENDORSEMENT_ACTION { get; set; }
    public string I_OR_S_OPTION_DAYS { get; set; }
    public string S_OPTION_PERCENT { get; set; }
    public string SERVICE_CHARGE_PREPAID { get; set; }
    public string REINSTATE_OPTION { get; set; }
    public string CASH_WITH_APPLICATION { get; set; }
    public string DB_CC_NOTICE { get; set; }
    public string DOWN_PAY_DAYS { get; set; }
    public string MONTH_BY_TERM { get; set; }
    public string LEAD_MONTHS { get; set; }
    public string INITIAL_MONTHS { get; set; }
    public string DB_CC_REJECTS { get; set; }
    public string RETURN_ENDORSEMENT_OPTION { get; set; }
    public string RETURN_SPLIT_OPTION_PERCENT { get; set; }
    public string AUTOMATED_REFUND_DAYS { get; set; }
    public string RENEWAL_OPTION_BILL_PLAN { get; set; }
    public string EFFECTIVE_DATE { get; set; }
    public string MISC_DATA { get; set; }
    public string MISC_DATA2 { get; set; }
}
}
namespace BillingApp.Models
{
using System;
using System.Collections.Generic;

public partial class HEADER_EXTENSION_RECORD
{
    public int ERID { get; set; }
    public string ETABLE_NUMBER { get; set; }
    public string ECOMPANY { get; set; }
    public string ESTATE_CODE { get; set; }
    public string EBILL_CODE { get; set; }
    public string ERECORD_TYPE { get; set; }
    public string EMASK_EXTENSION_ID { get; set; }
    public string OVERPAYMENT_TOLERANCE_PERCENT { get; set; }
    public string UNDERPAYMENT_TOLERANCE_PERCENT { get; set; }
}
}
控制器(BillingController.cs)

更新:

在控制器中添加了tbl1join作为返回类型,但给出了一个错误,指出它是一个用作变量的类型

  public ActionResult HeaderRecordTable1()
    {
        {
            return View(IEnumerable<tbl1join>);
        }
    }
public ActionResult HeaderRecordTable1()
{
{
返回视图(IEnumerable);
}
}

将其包装到ViewModel中

public class RecordVM
{
    public HEADER_RECORD header { get; set; }
    public HEADER_EXTENSION_RECORD ext { get; set; }
}

return View(new RecordVM { header = db.HEADER_RECORD, ext = db.HEADER_EXTENSION_RECORD });

错误消息表示您传入了错误的类型,您需要查询数据库并创建视图所需的适当模型。看起来您正试图使用视图模型tbl1join将2个模型传递给视图

对于指定的id值,可以按如下方式填充视图模型:

public ActionResult ViewModelExtension(int id)
{
    var viewModel = new tbl1join();

    viewModel.HEADER_RECORD = db.HEADER_RECORD.Where(h => h.id == id).SingleOrDefault;
    viewModel.HEADER_EXTENSION_RECORD = db.HEADER_EXTENSION_RECORD.Where(h => h.id == id).SingleOrDefault;

    return View(viewModel);
}

如果这两个模型之间没有关系,我会感到惊讶。如果这是在您的两个模型中指定的,则上述操作可以不同。

您的视图接受一个
IEnumerable
。看起来您已经全部设置好了,为什么不让控制器操作返回
IEnumerable
?这两个模型之间有关系吗?您不能使用导航属性/关系将数据连接在一起吗?您需要以某种方式填充您的模型,即基于您的数据库创建
tbl1join
s,但是您需要将它们连接在一起,此时使用代码至少可以让我走上正确的方向,我已经有一段时间没有找到解决方案了。你可以调查一下。基本上,
tbl1join
已经是一个视图模型了。使用ViewModel,可以将两个(或多个)模型合并在一个视图中显示。