Я проверил с помощью this , но все равно получил null.
У меня есть один компонент бритвы, для которого используется datepickerrange. вы можете увидеть ниже. Я вызвал daterangepickerInit для инициализации daterangepicker в OnInitializedAsync()
. Здесь я передаю DotNetObjectReference
другого компонента под названием BookedHoursWidgetComponent
, чтобы получить доступ к его службам.
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
await Task.Delay(1).ContinueWith(async t =>
{
await JSRuntime.InvokeVoidAsync("DateRangePicker.daterangepickerInit");
});
}
}
Ниже приведен код для DateRangePicker.daterangepickerInit
.
window.DateRangePicker = {
daterangepickerInit: function (dotNet) {
if ($('#kt_dashboard_daterangepicker').length == 0) {
return;
}
var picker = $('#kt_dashboard_daterangepicker');
var start = moment().startOf('month');
var end = moment().endOf('month');
function cb(start, end, label) {
var title = '';
var range = '';
if ((end - start) < 100 || label == 'Today') {
title = 'Today:';
range = start.format('MMM D');
} else if (label == 'Yesterday') {
title = 'Yesterday:';
range = start.format('MMM D');
} else {
range = start.format('MMM D') + ' - ' + end.format('MMM D');
}
picker.find('#kt_dashboard_daterangepicker_date').html(range);
picker.find('#kt_dashboard_daterangepicker_title').html(title);
Date.prototype.yyyymmdd = function () {
var mm = this.getMonth() + 1;
var dd = this.getDate();
return [this.getFullYear(),
(mm > 9 ? '' : '0') + mm,
(dd > 9 ? '' : '0') + dd
].join('');
};
var graphFilterModel = { StartDate: start.toDate().yyyymmdd(), EndDate: end.toDate().yyyymmdd() };
// stateManager.save('GraphFilterModel', JSON.stringify(graphFilterModel));
// window.localStorage['GraphFilterModel'] = JSON.stringify(GraphFilterModel);
dotNet.invokeMethodAsync('ApplyFilter', graphFilterModel);
// DotNet.invokeMethodAsync('Momo.Client', 'ApplyFilter', start.toDate().yyyymmdd(), end.toDate().yyyymmdd());
}
picker.daterangepicker({
direction: KTUtil.isRTL(),
startDate: start,
endDate: end,
opens: 'left',
applyClass: "btn btn-sm btn-primary",
cancelClass: "btn btn-sm btn-secondary",
ranges: {
'This Week': [moment().startOf('week'), moment()],
'Last Week': [moment().subtract(1, 'week').startOf('week'), moment().subtract(1, 'week').endOf('week')],
'This Month': [moment().startOf('month'), moment().endOf('month')],
'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
}
}, function (start, end, label) {
cb(start, end, label);
});
cb(start, end, '');
}
}
ниже - это код для BookedHoursWidgetComponent
. Итак, вот метод под названием ApplyFilter
, который вызывается из js, когда я выбираю диапазон дат. из этого метода я вызываю свой метод загрузки табелей учета рабочего времени, но проблема в том, что я всегда получаю TimesheetService
& ChartService
null.
ниже мой код для BookedHoursWidgetComponent
.
public class BookedHoursWidgetComponent : ComponentBase
{
[Inject] TimesheetService TimesheetService { get; set; }
[Inject] ProjectService ProjectService { get; set; }
[Inject] ChartService ChartService { get; set; }
[Inject] IMapper Mapper { get; set; }
[Inject] protected IJSRuntime JSRuntime { get; set; } = null;
[Inject] IStringLocalizer<Common> Localizer { get; set; }
protected string BookingHours = string.Empty;
protected override async Task OnInitializedAsync()
{
await ProjectService.GetAllProjects();
await LoadTimesheet(new GraphFilterModel());
}
private async Task LoadTimesheet(GraphFilterModel graphFilterModel)
{
var timesheets = await TimesheetService.GetCurrentUserTimesheetsAsync();
//var filterJson = await JSRuntime.InvokeAsync<string>("stateManager.load", nameof(GraphFilterModel));
//var graphFilterModel = JsonSerializer.Deserialize<GraphFilterModel>(filterJson);
var pattern = LocalDatePattern.CreateWithInvariantCulture("yyyyMMdd");
LocalDate startDate, endDate;
if (!string.IsNullOrEmpty(graphFilterModel.StartDate) && !string.IsNullOrEmpty(graphFilterModel.EndDate))
{
startDate = pattern.Parse(graphFilterModel.StartDate).GetValueOrThrow();
endDate = pattern.Parse(graphFilterModel.EndDate).GetValueOrThrow();
timesheets = timesheets.Where(x => x.Date >= startDate && x.Date <= endDate).ToList();
}
var bookedHoursTimesheets = Mapper.Map<List<BookedHoursTimesheet>>(timesheets);
var BookedDuration = new Duration();
foreach (var timesheet in bookedHoursTimesheets)
{
BookedDuration = BookedDuration.Plus(timesheet.Duration);
}
BookingHours = BookedDuration.ToString("HH:mm", null);
// Chart code
var BookedHoursGraphModelProjectWise = bookedHoursTimesheets.GroupBy(x => x.Project.Name).Select(y => new BookedHoursGraphModel
{
Project = y.Key,
Hours = GetTotalDuration(y)
}).OrderByDescending(x => x.Hours);
var ProjectModel = BookedHoursGraphModelProjectWise.Take(9).ToList();
var Other = BookedHoursGraphModelProjectWise.Where(x => !ProjectModel.Select(y => y.Project).Contains(x.Project));
ProjectModel.Add(new BookedHoursGraphModel
{
Project = Localizer["BookedHoursWidget.Other"],
Hours = Other.Sum(x => x.Hours)
});
string[] BackgroundColors = { Colors.Base.Shape[1], Colors.Base.Shape[2], Colors.State.States["brand"] };
var GraphDataModel = new GraphDataModel
{
Data = ProjectModel.Select(x => x.Hours),
Labels = ProjectModel.Select(x => x.Project),
BackgroundColors = BackgroundColors
};
var BookedHoursGraphModel = ChartService.GenerateGraphModel(GraphDataModel);
await JSRuntime.InvokeAsync<string>("CanvasGraph.LoadGraph",
BookedHoursGraphModel, Settings.WidgetCanvas.BookedHoursWidgetCanvas);
}
protected double GetTotalDuration(IGrouping<string, BookedHoursTimesheet> model)
{
var Hour = new Duration();
foreach (var objHours in model.Select(x => x.Duration))
{
Hour = Hour.Plus(objHours);
}
return Hour.TotalHours;
}
[JSInvokable]
public async Task ApplyFilter(GraphFilterModel graphFilterModel)
{
//var pattern = LocalDatePattern.CreateWithInvariantCulture("yyyyMMdd");
//var startDate = pattern.Parse(start).GetValueOrThrow();
//var endDate = pattern.Parse(end).GetValueOrThrow();\
await LoadTimesheet(graphFilterModel);
// return Task.CompletedTask;
}
}
Почему я получаю ноль? Также я использую DotNetObjectReference.Create
. что мне делать, чтобы не получить услугу null.
Спасибо за помощь!