在视图中渲染数据之前,在控制器上过滤数据

本文关键字:数据 控制器 过滤 视图 | 更新日期: 2023-09-27 18:27:18

  1. 你好,我是MVC5、Razor和EF的新手,我已经找了两天了,仍然无法找到解决问题的方法
  2. 我想做的是查看用户输入年份、季度和部门的情况。在提交时,我希望另一个视图的控制器在渲染视图之前查看这些参数并过滤数据。目前,我有5个不同的分区,并且我希望在渲染视图时只过滤一个分区
  3. 我看了很多论坛、网站等,试图弄清楚这一点,但我运气不佳。我很高兴至少能被指向正确的方向。我正试图通过跳进火里自己弄清楚来学习这一点,但我现在需要帮助
  4. 我对MVC的工作原理有一个完整的想法,我在使用DB方面没有任何问题,而且我成功地学习了脚手架和ViewModels的工作原理。我现在正在努力学习如何操作控制器和视图中的数据。如有任何帮助,我们将不胜感激
  5. 视图1-只需输入参数

    <p> Enter Year: @Html.TextBox("Year")</p>
    <p> Enter Quarter: @Html.TextBox("Qtr")</p> 
    <p> Enter Division: @Html.TextBox("Div")</p>
    <p><input id="Submit" type="button" value="button" /></p>
    
  6. 视图2 控制器

    namespace BSIntranet.Controllers
    {
        public class DivisionIncomeController : Controller
        {
            private ProjectionsEntities db = new ProjectionsEntities();
            // GET: DivisionIncome
            public ActionResult Index()
            {
                return View(db.JobRecaps.ToList());
            }
        }
    }
    

我不知道从这里开始干什么,也不知道如何开始。谢谢你的帮助!!

编辑使用系统;使用System.Collections.Generic;

public partial class JobRecap
{
    public int ID { get; set; }
    public string Job_ID { get; set; }
    public int Year { get; set; }
    public int Qtr { get; set; }
    public string Div { get; set; }
    public string PreparedBy { get; set; }
    public string ReviewedBy { get; set; }
    public Nullable<System.DateTime> Date { get; set; }
    public Nullable<System.DateTime> ProjStart { get; set; }
    public Nullable<System.DateTime> ProjComp { get; set; }
    public string SvgsSplit { get; set; }
    public Nullable<int> OwnerSplit { get; set; }
    public Nullable<int> BSSplit { get; set; }
    public string JointVent { get; set; }
    public Nullable<int> BSPct { get; set; }
    public string ContractType { get; set; }
    public string ContractWritten { get; set; }
    public Nullable<decimal> CurContrAmt { get; set; }
    public string FeeBasis { get; set; }
    public Nullable<decimal> EstTotFeePct { get; set; }
    public Nullable<decimal> EstTotFeeAmt { get; set; }
    public string PreconFeeBasis { get; set; }
}

在视图中渲染数据之前,在控制器上过滤数据

为了保持简单,您可以简单地将int? Year, int? Qtr, string Div参数添加到Index操作中,并使用它们进行搜索:

public ActionResult Index(int? Year, int? Qtr, string Div)
{
    var data= db.JobRecaps.AsQueryable();
    if(Year.HasValue)
        data= data.Where(x=>x.Year == Year);
    if(Qtr.HasValue)
        data= data.Where(x=>x.Qtr == Qtr );
    if(!string.IsNullOrEmpty(Div))
        data= data.Where(x=>x.Div == Div );   
    return View(data.ToList());
}

注意:

此外,您还可以分离关注点,创建一个包含这些搜索参数的JobRecapSearchModel并将其用作操作参数,还可以创建一个JobRecapBusinessLogic类,其中包含我在上面使用的业务的List<JobRecap> Search(JobRecapSearchModel searchMode)方法。这样,您将拥有一个更灵活、更美观的控制器。

要了解更多关于如何使用这种方法和好处的信息,你可以看看这个问题:

  • 使用多个字段筛选/搜索-ASP.NET MVC