Например, кнопка нажимается, а State1 IS true , а State2 в настоящее время является false .
, если я продолжу, либо state1 function function и verse function и verse function и vesture -функция, и versa> vescupt function и versa -функция, или vescupt wers, или vescupt function, или vescupd wers, или vescupt function. /> < /li>
[*] Он должен обрабатывать сообщения проверки соответственно с их конкретными функциями. < /p>
< /li>
< /ul>
Но это не достигнуто в моей текущей настройке. PrettyPrint-Override ">
Код: Выделить всё
[Keyless]
public class SomeModel
{
[Required]
[ValidateComplexType]
public SomeOtherModel SomeOtherModel { get; set; }
[Required]
public string? SelectedRoleID { get; set; }
[Required(ErrorMessage = "Required field.")]
public string? SelectedRole { get; set; }
[Required]
public string? SelectedRemarkID { get; set; }
[Required(ErrorMessage = "Required field.")]
public string? SelectedRemark { get; set; }
public SomeModel() // for demonstration purposes only XD, I observed that it is not currently in use.
{
SomeOtherModel = new SomeOtherModel();
}
}
[Keyless]
public class SomeOtherModel
{
[Required]
public string? SomeField { get; set; }
// other fields here...
}
< /code>
страница Razor < /h3>
client-side < /h4>
@page "/users/review-user"
@page "/users/review/{Id}/user"
@rendermode InteractiveServer
@using Microsoft.EntityFrameworkCore
@using MyProject.Models.SQLServer
@using MyProject.Data.SQLServer
@implements IAsyncDisposable
@inject IDbContextFactory DbFactory
@inject NavigationManager NavigationManager
@inject IJSRuntime JS
Details
Review User
@if (plainTextModel is null)
{
Loading...
}
else
{
#
@rowNum
Role
@if (isModifyUser)
{
@if (userRoles is null)
{
Loading...
}
else
{
@(SomeModel.SelectedRole ?? "Please select a role")
@foreach (var role in userRoles)
{
@role.RoleType
}
}
}
else
{
@plainTextModel.RoleType
}
@if (isModifyUser || isReevaluateUser)
{
Save Changes
Discard
}
Remarks
@if (isReevaluateUser)
{
@if (userRemarks is null)
{
Loading...
}
else
{
@(SomeModel.SelectedRemark ??
"Please select a remark")
@foreach (var remark in userRemarks)
{
@remark.Remarks
}
}
}
else
{
@if (plainTextModel.Remarks == null)
{
-
}
else
{
@plainTextModel.Remarks
}
}
Reevaluate
User
Modify User
Role
@if (reviewUserListImageSingle is null)
{
Loading...
}
else
{
@*other code here*@
@*other code here*@
@*other code here*@
}
}
role="alert" aria-live="assertive" aria-atomic="true" data-bs-delay="1500">
Successfully modified!
class="toast align-items-center text-bg-danger border-0 position-fixed bottom-0 end-0 mb-3 me-3" role="alert"
aria-live="assertive" aria-atomic="true" data-bs-delay="1500">
@if (errorMessage is not null)
{
@errorMessage
}
else
{
Someting went wrong. Please try again later.
}
aria-hidden="true">
Are you sure you want to verify this user?
Close
@* *@
Confirm
< /code>
server-side < /h4>
@code {
private SomeModel SomeModel = new SomeModel();
private PlainTextModel? plainTextModel = new();
private UserListImageSingleDM? reviewUserListImageSingle = new();
private List? userRoles = new();
private List? userRemarks = new();
private SQLServerContext context = default!;
[SupplyParameterFromQuery(Name = "status")]
private bool status { get; set; }
[SupplyParameterFromQuery(Name = "row")]
private long rowNum { get; set; }
[Parameter]
public string? Id { get; set; }
private bool isModifyUser = false;
private bool isReevaluateUser = false;
private string? errorMessage;
private string? output;
protected override async Task OnInitializedAsync()
{
context = DbFactory.CreateDbContext();
await LoadPlainText();
}
private async Task LoadPlainText()
{
var sQLServerHelper = new SQLServerHelper(context);
var spParamPlainText = SQLServerInnerHelper.GlobalMethodRazorPageParam(id: Id, key:
"REVIEW_USER_PLAINTEXT");
plainTextModel = await sQLServerHelper.PlainTextAsync("myStoredProcedure", spParamPlainText);
// TODO: Let this load first.
if (plainTextModel is null)
{
NavigationManager.NavigateTo("notfound");
}
StateHasChanged();
}
private async Task ModifyUser()
{
SomeModel.SelectedRemark = null;
isModifyUser = true;
isReevaluateUser = false;
// data fetch for userRoles
}
private async Task ReevaluateUser()
{
SomeModel.SelectedRoleID = null;
SomeModel.SelectedRole = null;
isReevaluateUser = true;
isModifyUser = false;
// data fetch for userRemarks
}
private void Discard()
{
isModifyUser = false;
isReevaluateUser = false;
}
private void OnRoleItemSelected(UserRoles item)
{
SomeModel.SelectedRoleID = item.RoleID ?? string.Empty;
SomeModel.SelectedRole = item.RoleType ?? string.Empty;
SetActiveRole(SomeModel.SelectedRoleID);
}
private void OnRemarkItemSelected(UserRemarks item)
{
SomeModel.SelectedRemarkID = item.RemarkID ?? string.Empty;
SomeModel.SelectedRemark = item.Remarks ?? string.Empty;
}
private void SetActiveRole(string id)
{
if (userRoles is null) return;
foreach (var role in userRoles)
role.IsActive = role.RoleID == id;
}
private async Task VerifyUser()
{
if (isModifyUser)
{
var sQLServerHelper = new SQLServerHelper(context);
var spParam = SQLServerInnerHelper.ManageUsersDataWOutputPageParams(userID: Id, roleID:
SomeModel.SelectedRoleID, functionKey:
"TEST_KEY_1");
output = await sQLServerHelper.StringOutputAsync("myStoredProcedure", spParam);
if (output is not null && output == "SUCCESSFUL")
{
await JS.InvokeVoidAsync("showLiveToast");
}
else if (output is not null && output != "SUCCESSFUL")
{
errorMessage = null;
await JS.InvokeVoidAsync("showLiveToastError");
}
else
{
errorMessage = null;
await JS.InvokeVoidAsync("showLiveToastError");
}
}
else if (isReevaluateUser)
{
var sQLServerHelper = new SQLServerHelper(context);
var spParam = SQLServerInnerHelper.ManageUsersDataWOutputPageParams(userID: Id, remarkID:
SomeModel.SelectedRemarkID, functionKey:
"TEST_KEY_2");
output = await sQLServerHelper.StringOutputAsync("myStoredProcedure", spParam);
if (output is not null && output == "SUCCESSFUL")
{
await JS.InvokeVoidAsync("showLiveToast");
}
else if (output is not null && output != "SUCCESSFUL")
{
errorMessage = null;
await JS.InvokeVoidAsync("showLiveToastError");
}
else
{
errorMessage = null;
await JS.InvokeVoidAsync("showLiveToastError");
}
}
else
{
var sQLServerHelper = new SQLServerHelper(context);
var spParam = SQLServerInnerHelper.ManageUsersDataWOutputPageParams(userID: Id, userIDModifier: "DevQt",
functionKey:
"TEST_KEY_3");
output = await sQLServerHelper.StringOutputAsync("myStoredProcedure", spParam);
if (output is not null && output == "SUCCESSFUL")
{
await JS.InvokeVoidAsync("showLiveToast");
}
else if (output is not null && output != "SUCCESSFUL")
{
errorMessage = null;
await JS.InvokeVoidAsync("showLiveToastError");
}
else
{
errorMessage = null;
await JS.InvokeVoidAsync("showLiveToastError");
}
}
}
public async ValueTask DisposeAsync() // this is important
{
await context.DisposeAsync();
}
}
< /code>
< /code>
< /code>
But I needed those classes to implement validation in the simplest way possible.
The concept of my project is inspired by this thread:
- Multiple Model validation in single EditForm in Server-Side Blazor
Подробнее здесь: https://stackoverflow.com/questions/797 ... xtype-mode