![](/img/trans.png)
[英]ASP.NET experts, I Need Help and I don't have any programming or coding background
[英]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.