在视图中呈现数据之前对其进行过滤

时间:2015-12-17 20:26:19

标签: c# asp.net-mvc razor

  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. View for View 2

    namespace BSIntranet.Controllers
    {
        public class DivisionIncomeController : Controller
        {
            private ProjectionsEntities db = new ProjectionsEntities();
    
            // GET: DivisionIncome
            public ActionResult Index()
            {
                return View(db.JobRecaps.ToList());
            }
        }
    }
    
  7. 我不知道在这里开始是什么或如何开始。谢谢你的帮助!!

    修改         使用系统;         使用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; }
    }
    

1 个答案:

答案 0 :(得分:5)

为了简单起见,您只需在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)类,其中包含我的业务用于上面。通过这种方式,您将拥有更灵活,更漂亮的控制器。

要了解有关如何使用此类方法的更多信息以及您可以查看此问题的好处: