簡體   English   中英

我需要幫助,因為我不明白為什么我的代碼沒有按日期執行過濾? ASP.NET

[英]I need help because I don't understand why my code is not performing filtering by date? ASP.NET

當我執行過濾時,沒有任何值返回給我

我的視圖索引頁

我認為問題出在我的 ActionResult 索引中,但我不知道它是什么,因為我認為引用是正確的。我在索引控制器中知道的是將變量 DataTime 轉換為 String

我的模特

public Nullable<System.DateTime> Data_Registo { get; set; }
public Programa()
    {
        Data_Registo = DateTime.Now;
    }

我的控制器:

public ActionResult Index(string startdate = null, string enddate = null)
    {
        if (startdate != null && enddate != null)
        {
            //this will default to current date if for whatever reason the date supplied by user did not parse successfully

            DateTime start = DateManager.GetDate(startdate) ?? DateTime.Now;

            DateTime end = DateManager.GetDate(enddate) ?? DateTime.Now;

            var rangeData = db.Programa.Where(x => x.Data_Registo >= start && x.Data_Registo <= end).ToList();

            return View(rangeData);
        }
        return View(db.Programa);
    }


    public class DateManager
    {

        static bool IsMonthAssigned { get; set; }



        public static DateTime? GetDate(string d)
        {
            char[] splitsoptions = { '/', '-', ' ' };
            foreach (var i in splitsoptions)
            {
                var y = 0;
                var m = 0;
                var day = 0;
                if (d.IndexOf(i) > 0)
                {
                    try
                    {
                        foreach (var e in d.Split(i))
                        {


                            if (e.Length == 4)
                            {
                                y = Convert.ToInt32(e);

                                continue;
                            }
                            if (Convert.ToInt32(e) <= 12 && !IsMonthAssigned)
                            {
                                m = Convert.ToInt32(e);
                                IsMonthAssigned = true;
                                continue;
                            }
                            day = Convert.ToInt32(e);


                        }

                        return new DateTime(y, m, day);
                    }
                    catch
                    {

                    }
                }
            }
            return null;


        }


        public static DateTime? GetDate(string d, bool custom)
        {
            CultureInfo culture = new CultureInfo("en-US");

            string[] dateFormats =
            {
            "dd/MM/yyyy", "MM/dd/yyyy", "yyyy/MM/dd", "yyyy/dd/MM", "dd-MM-yyyy", "MM-dd-yyyy", "yyyy-MM-dd",
            "yyyy-dd-MM", "dd MM yyyy", "MM dd yyyy", "yyyy MM dd", "yyyy dd MM", "dd.MM.yyyy", "MM.dd.yyyy",
            "yyyy.MM.dd", "yyyy.dd.MM","yyyyMMdd","yyyyddMM","MMddyyyy","ddMMyyyy"
        };//add your own to the array if any

            culture.DateTimeFormat.SetAllDateTimePatterns(dateFormats, 'Y');

            if (DateTime.TryParseExact(d, dateFormats, culture, DateTimeStyles.None, out var date))
                return date;

            return null;


        }
    }

我的看法

@using (Html.BeginForm("Index", "Programas", FormMethod.Get))
{
<fieldset>
    <legend>Search criteria</legend>
    @Html.Label("StartDate", "Start Date:")
    <input class="startdate" id="startdate" name="startdate" type="date" value="">
    @Html.Label("enddate", "End Date:")
    <input class="startdate" id="enddate" name="enddate" type="date" value="">
    <input type="submit" value="Apply" />
</fieldset>
}

(更新)我嘗試創建直接條目,但未從數據庫加載數據

        public ActionResult Index(DateTime? start, DateTime? end)
    {

            var programas = db.Programa.Where(x => x.Data_Registo >= start && x.Data_Registo <= end).ToList();

        return View(programas.ToList());


    }

感謝幫助

您的數據庫應該允許日期時間列已經以正確的日期和時間格式存儲數據。 你不應該用不同的格式來解析它。 然后,當您查詢它並想要這些特定部分時,有日期時間函數可以從中提取諸如年、月、日、小時、分鍾、秒之類的內容。 在您擁有數據后,打印/顯示輸出將成為格式化的一部分。 您也沒有指明您正在使用哪個數據庫。 對該數據庫和日期時間函數進行搜索,你會看到很多東西...... MySQL、SQL-Server、Oracle 等。

我終於設法在日期之間進行過濾,就像盡可能簡單一樣。 我在下面留下代碼,所以你需要按日期過濾。

public ActionResult Index(string startdate = null, string enddate = null)
    {
        if (startdate != null && enddate != null)
        {

            DateTime start = Convert.ToDateTime(startdate);

            DateTime end = Convert.ToDateTime(enddate);

            var rangeData = db.YourTable.Where(x => x.YourColumn >= start && x.YourColumn<= end).ToList();

            return View(rangeData);
        }
        return View(db.YourTable.ToList());
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM