使用具有相同数据库表的2个表过滤视图

时间:2016-01-21 19:55:43

标签: asp.net-mvc entity-framework

我创建了一个包含2个表的视图。 我想要的是根据事务类型过滤每个表数据,例如table1应该只显示应付款管理列表,而table2应该只显示可回收列表。

这是代码 注意当我导航到视图服务器时显示我无法找到资源。其他视图都可以。这是我的代码。 我的项目有BOL(EF模型)BLL(业务对象)DAL(数据访问层)和我的主要Mvc项目

视图

@model shinwari_traders.Areas.Shinwari.Models.ADetailsVm
@{
    ViewBag.Title = "Index";
}

<h2>AccountDetails</h2>

<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table id="Payables" class="table">
    <tr>
        <th>
            Date
        </th>
        <th>
            Discription
        </th>
        <th>
            Amount
        </th>
    </tr>

    @foreach (var item in Model.Payables)
    {
        <tr>
            <td>
                @item.Date
            </td>
            <td>
                @item.Discription
            </td>
            <td>
                @item.Amount
            </td>
        </tr>
    }

</table>

<table id="Reciveables" class="table">
    <tr>
        <th>
            Date
        </th>
        <th>
            Discription
        </th>
        <th>
            Amount
        </th>
    </tr>

    @foreach (var item in Model.Reciveables)
    {
        <tr>
            <td>
                @item.Date
            </td>
            <td>
                @item.Discription
            </td>
            <td>
                @item.Amount
            </td>
        </tr>
    }

</table>

控制器

    public class AccountDetailsController : Controller
{
    private TransictionBs objbs;
    public AccountDetailsController() 
    {
        objbs = new TransictionBs(int accountid);
    }
    // GET: Shinwari/AccountDetails
    public ActionResult Index(int accountid)
    {     var v= new ADetails();
          v.Payable = objbs.GetALL().Where(p => p.AId==accountid&& p.tbl_TransictionType.Type.Contains("Payable"));
          v.Reciveable = objbs.GetALL().Where(r => r.AId==accountid && r.tbl_TransictionType.Type.Contains("Reciveable"));


        return View(v);
    }
}

}

模型类

    public class ADetailsVm
{
    public List<BOL.tbl_Transiction> Payables { get; set; }
    public List<BOL.tbl_Transiction> Reciveables { get; set; }

}

DatabaseTable

 public partial class tbl_Transiction
{
    public int TId { get; set; }
    public Nullable<System.DateTime> Date { get; set; }
    public Nullable<int> AId { get; set; }
    public string Discription { get; set; }
    public Nullable<double> PKR { get; set; }
    public Nullable<double> Rate { get; set; }
    public Nullable<double> Amount { get; set; }
    public Nullable<int> TTId { get; set; }

    public virtual tbl_Accounts tbl_Accounts { get; set; }
    public virtual tbl_TransictionType tbl_TransictionType { get; set; }
}

1 个答案:

答案 0 :(得分:1)

您需要一个具有2个集合属性的新视图模型,每个集合对应一个集合。

public class AccountDetailsVm
{
   public List<BOL.tbl_Transiction> Reciveable {set;get;}
   public List<BOL.tbl_Transiction> Payable {set;get;}
}

在您的GET操作中,创建此视图模型的对象,填充这两个属性。

public ActionResult Index(int accountid)
{
   var v=new AccountDetailsVm();
   //Load both the collection properties
   v.Payables = objbs.GetALL()
           .Where(p => p.AId==accountid && p.tbl_TransictionType.Type.Contains("Payable"));
   v.Reciveable = objbs.GetByID(accountid).tbl_TransictionType.Type.Contains("Reciveable");

   return View(v);
}

您的视图与新视图模型绑定。我刚才在这里添加了最小的代码。您可以将渲染转换为表格。

@model AccountDetailsVm

<h1>Reciveable</h1>
@foreach(var item in Model.Reciveable)
{
  <p>@item.Amount</p> 
}

<h1>Payable</h1>
@foreach(var item in Model.Payable)
{
  <p>@item.Amount</p>
}