My projects don't include the word Blazor in them. Until I created the new module everything worked fine. It appeared as though the new module was created as a web project instead of a Blazor project and it has messed up things. How can I fix it so suite recognizes that it is dealing with a Blazor project again?
Thank you for the reply. I've added the select to a razor page and set the SelectedValue to a property in my .cs file, but the binding isn't working. Please advise. I'm adding my code below:
@page "/item-categories"
@attribute [Authorize(RadixSalesQuotePermissions.ItemCategories.Default)]
@using RadixSalesQuote.BusinessObjects
@using RadixSalesQuote.Localization
@using RadixSalesQuote.Shared
@using Microsoft.AspNetCore.Authorization
@using Microsoft.Extensions.Localization
@using Blazorise.Components
@using Volo.Abp.BlazoriseUI.Components
@using Volo.Abp.ObjectMapping
@using Volo.Abp.AspNetCore.Components.Messages
@using Volo.Abp.AspNetCore.Components.Web.Theming.Layout
@using RadixSalesQuote.Permissions
@inherits RadixSalesQuoteComponentBase
@inject IItemCategoriesAppService ItemCategoriesAppService
@inject IUiMessageService UiMessageService
@* ************************* PAGE HEADER ************************* *@
<PageHeader Title="@L["ItemCategories"]" BreadcrumbItems="BreadcrumbItems" Toolbar="Toolbar">
</PageHeader>
@* ************************* SEARCH ************************* *@
<Card>
<CardBody>
<Form id="ItemCategorySearchForm" class="mb-3">
<Addons>
<Addon AddonType="AddonType.Body">
<TextEdit @bind-Text="@Filter.FilterText"
Autofocus="true"
Placeholder="@L["Search"]">
</TextEdit>
</Addon>
<Addon AddonType="AddonType.End">
<SubmitButton Form="ItemCategorySearchForm" Clicked="GetItemCategoriesAsync">
<Icon Name="IconName.Search" Class="me-1"></Icon>@L["Search"]
</SubmitButton>
</Addon>
</Addons>
<Div Class="row col-md-2">
<Select SelectedValue="@Filter.ActiveFilter">
<SelectItem Value="0">@L["ActiveOnly"]</SelectItem>
<SelectItem Value="1">@L["InactiveOnly"]</SelectItem>
<SelectItem Value="2">@L["All"]</SelectItem>
</Select>
</Div>
</Form>
</CardBody>
</Card>
@* ************************* DATA GRID ************************* *@
<Card>
<CardBody>
<DataGrid TItem="ItemCategoryDto"
Data="ItemCategoryList"
ReadData="OnDataGridReadAsync"
TotalItems="TotalCount"
ShowPager="true"
Responsive="true"
PageSize="PageSize">
<DataGridColumns>
<DataGridEntityActionsColumn TItem="ItemCategoryDto" @ref="@EntityActionsColumn">
<DisplayTemplate>
<EntityActions TItem="ItemCategoryDto" EntityActionsColumn="@EntityActionsColumn">
<EntityAction TItem="ItemCategoryDto"
Visible="@CanEditItemCategory"
Clicked="async () => await OpenEditItemCategoryModalAsync(context)"
Text="@L["Edit"]"></EntityAction>
<EntityAction TItem="ItemCategoryDto"
Visible="@CanDeleteItemCategory"
Clicked="() => DeleteItemCategoryAsync(context)"
ConfirmationMessage="@(()=> L["DeleteConfirmationMessage"])"
Text="@L["Delete"]"></EntityAction>
</EntityActions>
</DisplayTemplate>
</DataGridEntityActionsColumn>
<DataGridColumn TItem="ItemCategoryDto"
Field="Name"
Caption="@L["Name"]">
</DataGridColumn>
</DataGridColumns>
</DataGrid>
</CardBody>
</Card>
@* ************************* CREATE MODAL ************************* *@
<Modal @ref="CreateItemCategoryModal">
<ModalContent Centered="true">
<Form id="CreateItemCategoryForm">
<ModalHeader>
<ModalTitle>@L["NewItemCategory"]</ModalTitle>
<CloseButton Clicked="CloseCreateItemCategoryModalAsync" />
</ModalHeader>
<ModalBody>
<Validations @ref="@NewItemCategoryValidations"
Mode="ValidationMode.Auto"
Model="@NewItemCategory"
ValidateOnLoad="false">
<Validation>
<Field>
<FieldLabel>@L["Name"] *</FieldLabel>
<TextEdit Autofocus @bind-Text="@NewItemCategory.Name" MaxLength="ItemCategoryConsts.NameMaxLength">
<Feedback>
<ValidationError />
</Feedback>
</TextEdit>
</Field>
</Validation>
</Validations>
</ModalBody>
<ModalFooter>
<Button Color="Color.Secondary"
Clicked="CloseCreateItemCategoryModalAsync">
@L["Cancel"]
</Button>
<SubmitButton Form="CreateItemCategoryForm" Clicked="CreateItemCategoryAsync" />
</ModalFooter>
</Form>
</ModalContent>
</Modal>
@* ************************* EDIT MODAL ************************* *@
<Modal @ref="EditItemCategoryModal">
<ModalContent Centered="true">
<Form id="EditItemCategoryForm">
<ModalHeader>
<ModalTitle>@L["Update"]</ModalTitle>
<CloseButton Clicked="CloseEditItemCategoryModalAsync" />
</ModalHeader>
<ModalBody>
<Validations @ref="@EditingItemCategoryValidations"
Mode="ValidationMode.Auto"
Model="@EditingItemCategory"
ValidateOnLoad="false">
<Validation>
<Field>
<FieldLabel>@L["Name"] *</FieldLabel>
<TextEdit Autofocus @bind-Text="@EditingItemCategory.Name" MaxLength="ItemCategoryConsts.NameMaxLength">
<Feedback>
<ValidationError />
</Feedback>
</TextEdit>
</Field>
</Validation>
</Validations>
</ModalBody>
<ModalFooter>
<Button Color="Color.Secondary"
Clicked="CloseEditItemCategoryModalAsync">
@L["Cancel"]
</Button>
<SubmitButton Form="CreateItemCategoryForm" Clicked="UpdateItemCategoryAsync" />
</ModalFooter>
</Form>
</ModalContent>
</Modal>
backend code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Blazorise;
using Blazorise.DataGrid;
using Volo.Abp.BlazoriseUI.Components;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Components.Web.Theming.PageToolbars;
using RadixSalesQuote.BusinessObjects;
using RadixSalesQuote.Permissions;
using RadixSalesQuote.Shared;
using Microsoft.AspNetCore.Mvc;
using RadixSalesQuote.Enumerations;
namespace RadixSalesQuote.Blazor.Pages
{
public partial class ItemCategories
{
protected List<Volo.Abp.BlazoriseUI.BreadcrumbItem> BreadcrumbItems = new List<Volo.Abp.BlazoriseUI.BreadcrumbItem>();
protected PageToolbar Toolbar {get;} = new PageToolbar();
private IReadOnlyList<ItemCategoryDto> ItemCategoryList { get; set; }
private int PageSize { get; } = LimitedResultRequestDto.DefaultMaxResultCount;
private int CurrentPage { get; set; } = 1;
private string CurrentSorting { get; set; }
private int TotalCount { get; set; }
private bool CanCreateItemCategory { get; set; }
private bool CanEditItemCategory { get; set; }
private bool CanDeleteItemCategory { get; set; }
private ItemCategoryCreateDto NewItemCategory { get; set; }
private Validations NewItemCategoryValidations { get; set; }
private ItemCategoryUpdateDto EditingItemCategory { get; set; }
private Validations EditingItemCategoryValidations { get; set; }
private Guid EditingItemCategoryId { get; set; }
private Modal CreateItemCategoryModal { get; set; }
private Modal EditItemCategoryModal { get; set; }
private GetItemCategoriesInput Filter { get; set; }
private DataGridEntityActionsColumn<ItemCategoryDto> EntityActionsColumn { get; set; }
protected string SelectedCreateTab = "itemCategory-create-tab";
protected string SelectedEditTab = "itemCategory-edit-tab";
public ItemCategories()
{
NewItemCategory = new ItemCategoryCreateDto();
EditingItemCategory = new ItemCategoryUpdateDto();
Filter = new GetItemCategoriesInput
{
ActiveFilter = Enumerations.ActiveInactiveFilter.Active,
MaxResultCount = PageSize,
SkipCount = (CurrentPage - 1) * PageSize,
Sorting = CurrentSorting
};
}
protected override async Task OnInitializedAsync()
{
await SetToolbarItemsAsync();
await SetBreadcrumbItemsAsync();
await SetPermissionsAsync();
}
protected virtual ValueTask SetBreadcrumbItemsAsync()
{
BreadcrumbItems.Add(new Volo.Abp.BlazoriseUI.BreadcrumbItem(L["Menu:ItemCategories"]));
return ValueTask.CompletedTask;
}
protected virtual ValueTask SetToolbarItemsAsync()
{
Toolbar.AddButton(L["NewItemCategory"], async () =>
{
await OpenCreateItemCategoryModalAsync();
}, IconName.Add, requiredPolicyName: RadixSalesQuotePermissions.ItemCategories.Create);
return ValueTask.CompletedTask;
}
private async Task SetPermissionsAsync()
{
CanCreateItemCategory = await AuthorizationService
.IsGrantedAsync(RadixSalesQuotePermissions.ItemCategories.Create);
CanEditItemCategory = await AuthorizationService
.IsGrantedAsync(RadixSalesQuotePermissions.ItemCategories.Edit);
CanDeleteItemCategory = await AuthorizationService
.IsGrantedAsync(RadixSalesQuotePermissions.ItemCategories.Delete);
}
//private Task OnActiveFilterChanged(int value)
//{
// Console.WriteLine(value.ToString());
// //Filter.ActiveFilter = (ActiveInactiveFilter)value;
// return Task.CompletedTask;
//}
private async Task GetItemCategoriesAsync()
{
Filter.MaxResultCount = PageSize;
Filter.SkipCount = (CurrentPage - 1) * PageSize;
Filter.Sorting = CurrentSorting;
var result = await ItemCategoriesAppService.GetListAsync(Filter);
ItemCategoryList = result.Items;
TotalCount = (int)result.TotalCount;
}
protected virtual async Task SearchAsync()
{
CurrentPage = 1;
await GetItemCategoriesAsync();
await InvokeAsync(StateHasChanged);
}
private async Task OnDataGridReadAsync(DataGridReadDataEventArgs<ItemCategoryDto> e)
{
CurrentSorting = e.Columns
.Where(c => c.SortDirection != SortDirection.Default)
.Select(c => c.Field + (c.SortDirection == SortDirection.Descending ? " DESC" : ""))
.JoinAsString(",");
CurrentPage = e.Page;
await GetItemCategoriesAsync();
await InvokeAsync(StateHasChanged);
}
private async Task OpenCreateItemCategoryModalAsync()
{
NewItemCategory = new ItemCategoryCreateDto{
};
await NewItemCategoryValidations.ClearAll();
await CreateItemCategoryModal.Show();
}
private async Task CloseCreateItemCategoryModalAsync()
{
NewItemCategory = new ItemCategoryCreateDto{
};
await CreateItemCategoryModal.Hide();
}
private async Task OpenEditItemCategoryModalAsync(ItemCategoryDto input)
{
var itemCategory = await ItemCategoriesAppService.GetAsync(input.Id);
EditingItemCategoryId = itemCategory.Id;
EditingItemCategory = ObjectMapper.Map<ItemCategoryDto, ItemCategoryUpdateDto>(itemCategory);
await EditingItemCategoryValidations.ClearAll();
await EditItemCategoryModal.Show();
}
private async Task DeleteItemCategoryAsync(ItemCategoryDto input)
{
await ItemCategoriesAppService.DeleteAsync(input.Id);
await GetItemCategoriesAsync();
}
private async Task CreateItemCategoryAsync()
{
try
{
if (await NewItemCategoryValidations.ValidateAll() == false)
{
return;
}
await ItemCategoriesAppService.CreateAsync(NewItemCategory);
await GetItemCategoriesAsync();
await CloseCreateItemCategoryModalAsync();
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
}
private async Task CloseEditItemCategoryModalAsync()
{
await EditItemCategoryModal.Hide();
}
private async Task UpdateItemCategoryAsync()
{
try
{
if (await EditingItemCategoryValidations.ValidateAll() == false)
{
return;
}
await ItemCategoriesAppService.UpdateAsync(EditingItemCategoryId, EditingItemCategory);
await GetItemCategoriesAsync();
await EditItemCategoryModal.Hide();
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
}
private void OnSelectedCreateTabChanged(string name)
{
SelectedCreateTab = name;
}
private void OnSelectedEditTabChanged(string name)
{
SelectedEditTab = name;
}
}
}
In the GetItemCategoriesAsync method is where the Filter.ActiveFilter should be getting set to the value of the SelectedValue but it's not.