我正在使用新的Razor頁與核心2.0,我試圖看看我是否可以共享查詢代碼通過將linq和db初始化到一個App_code文件夾中的實用程序類,但是我在使這個類正常工作時遇到了問題。從頁方法和WebApi控制器與Razor頁面調用共享代碼
基本上我用linq查詢數據庫,但我也有另一個將創建PDF的asp頁面處理程序。
這裏是我的網頁
public class IndexModel : PageModel
{
private readonly CrewLogContext _context;
//initialize db
public IndexModel(CrewLogContext context)
{
_context = context;
}
public IList<SelectionDailyReport> SelectionDailyReport { get; set; }
public DateSearchRange DateSearchRange { get; set; }
public async Task OnPostSelectionAsync(DateSearchRange DateSearchRange)
{
var result= await _context.TaskSelection.Where(x => x.WorkDate >= startDate && x.WorkDate <= endDate)
.Include(t => t.Zone).OrderBy(x => x.AssocId).ToListAsync();
SelectionDailyReport = result;
}
確定。所以這工作正常。我也有另一個按鈕,它調用一個基本上查詢相同數據並生成PDF的webApi控制器。
我想創建一個工具類,並從頁面或webapi控制器調用它的方法,所以我不必寫兩次linq查詢。
我創建了一個App_Folder並添加一個cs文件
在Utility.cSnamespace WebCrewLog.App_Code
{
public class Utility
{
private CrewLogContext _context;
//initiate db connection
public Utility(CrewLogContext context)
{
_context = context;
}
public IList<SelectionDailyReport> GetSelectionData (DateSearchRange DateSearchRange)
{
var myList = _context.TaskSelection.Where(x => x.WorkDate >=DateSearchRange.StartDate && x.WorkDate <= DateSearchRange.EndDate)
.Include(t => t.Zone).OrderBy(x => x.AssocId).ToList();
return myList ;
}
然後從我的網頁或我的WebAPI我想叫
SelectionDailyReport = Utility.GetSelectionData(DateSearchRange);
所以問題
是intellisense不檢測GetSelectionData方法。所以我想我應該讓GetSelectionData方法是靜態的。
所以更改工具類
public IList<SelectionDailyReport> GetSelectionData (DateSearchRange DateSearchRange)
{
var myList = _context.TaskSelection.Where(x => x.WorkDate >=DateSearchRange.StartDate && x.WorkDate <= DateSearchRange.EndDate)
.Include(t => t.Zone).OrderBy(x => x.AssocId).ToList();
....
public static IList<SelectionDailyReport> GetSelectionData (DateSearchRange DateSearchRange)
{
var myList = _context.TaskSelection.Where(x => x.WorkDate >=DateSearchRange.StartDate && x.WorkDate <= DateSearchRange.EndDate)
.Include(t => t.Zone).OrderBy(x => x.AssocId).ToList();
....
然而,當我這樣做,我得到的_context.TaskSelection空例外,不知道這是爲什麼。
因爲當您將其更改爲靜態方法時,'_context'未在同一方法中定義。您在Utility實例的構造函數中聲明瞭它。您之前的嘗試'Utility.GetSelectionData()'將該調用作爲靜態方法,但是您將'.GetSelectionData'作爲實例方法編寫。 – Jasen