在控制器中呈现数据,然后在视图中呈现数据

Dav*_*ams 5 c# asp.net-mvc razor

  1. 您好,我是很新的,以MVC5,剃须刀,以及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>
    
    Run Code Online (Sandbox Code Playgroud)
  6. 视图控制器2

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

我不知道在这里开始是什么或如何开始.谢谢你的帮助!!

编辑 使用系统; 使用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; }
}
Run Code Online (Sandbox Code Playgroud)

Rez*_*aei 6

为了简单起见,您只需int? Year, int? Qtr, string DivIndex操作中添加参数并使用它们进行搜索:

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());
}
Run Code Online (Sandbox Code Playgroud)

注意:

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

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

  • 并不是说它在技术上很重要,但是"AsQueryable"是不必要的.`db.JobRecaps`返回`IQueryable`. (2认同)