Обход проблемы с nullable bools в Blazor EditForm InputCheckboxC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Обход проблемы с nullable bools в Blazor EditForm InputCheckbox

Сообщение Anonymous »

Я пытаюсь создать индивидуальный ввод для формы редактирования в Blazor на основе базы ввода, однако изо всех сил пытаюсь разобраться в этом, поскольку я только недавно начал изучать Blazor на этой неделе и C# в целом в этом месяце. >
Я нашел
https://www.meziantou.net/creating-a-in ... blazor.htm (или найдите код, вставленный ниже) и смог использовать его для нулевых перечислений внутри inputselect, однако попытка воспроизвести его для входного флажка с нулевым значением не принесла никаких результатов. Мне было интересно, есть ли у кого-нибудь ссылка или кто-нибудь знает, как ее настроить, чтобы это заработало.
Заранее спасибо, я практически весь день буду за компьютером, так что не стесняйтесь задавай вопросы, постарайся не ругать меня, хаха.
// file: Shared/InputSelectEnum.cs
using System;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
using System.Reflection;
using Humanizer;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Forms;
using Microsoft.AspNetCore.Components.Rendering;

// Inherit from InputBase so the hard work is already implemented 😊
// Note that adding a constraint on TEnum (where T : Enum) doesn't work when used in the view, Razor raises an error at build time. Also, this would prevent using nullable types...
namespace OrderServiceFrontEnd.Shared
{
public sealed class InputSelectEnum : InputBase
{
// Generate html when the component is rendered.
protected override void BuildRenderTree(RenderTreeBuilder builder)
{
builder.OpenElement(0, "select");
builder.AddMultipleAttributes(1, AdditionalAttributes);
builder.AddAttribute(2, "class", CssClass);
builder.AddAttribute(3, "value", BindConverter.FormatValue(CurrentValueAsString));
builder.AddAttribute(4, "onchange", EventCallback.Factory.CreateBinder(this, value => CurrentValueAsString = value, CurrentValueAsString, null));

// Add an option element per enum value
var enumType = GetEnumType();
foreach (TEnum value in Enum.GetValues(enumType))
{
builder.OpenElement(5, "option");
builder.AddAttribute(6, "value", value.ToString());
builder.AddContent(7, GetDisplayName(value));
builder.CloseElement();
}

builder.CloseElement(); // close the select element
}

protected override bool TryParseValueFromString(string value, out TEnum result, out string validationErrorMessage)
{
// Let's Blazor convert the value for us 😊
if (BindConverter.TryConvertTo(value, CultureInfo.CurrentCulture, out TEnum parsedValue))
{
result = parsedValue;
validationErrorMessage = null;
return true;
}

// Map null/empty value to null if the bound object is nullable
if (string.IsNullOrEmpty(value))
{
var nullableType = Nullable.GetUnderlyingType(typeof(TEnum));
if (nullableType != null)
{
result = default;
validationErrorMessage = null;
return true;
}
}

// The value is invalid => set the error message
result = default;
validationErrorMessage = $"The {FieldIdentifier.FieldName} field is not valid.";
return false;
}

// Get the display text for an enum value:
// - Use the DisplayAttribute if set on the enum member, so this support localization
// - Fallback on Humanizer to decamelize the enum member name
private string GetDisplayName(TEnum value)
{
// Read the Display attribute name
var member = value.GetType().GetMember(value.ToString())[0];
var displayAttribute = member.GetCustomAttribute();
if (displayAttribute != null)
return displayAttribute.GetName();

// Require the NuGet package Humanizer.Core
//
return value.ToString().Humanize();
}

// Get the actual enum type. It unwrap Nullable if needed
// MyEnum => MyEnum
// MyEnum? => MyEnum
private Type GetEnumType()
{
var nullableType = Nullable.GetUnderlyingType(typeof(TEnum));
if (nullableType != null)
return nullableType;

return typeof(TEnum);
}
}

}


Компьютер Blazor:



Подробнее здесь: https://stackoverflow.com/questions/642 ... ork-around
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Проверка Blazor EditForm значения nullable int
    Anonymous » » в форуме C#
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Что не так с InputCheckBox Blazor
    Гость » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Гость
  • В Blazor, C# и Postgresql я не могу выполнить INSERT INTO с помощью Blazor EditForm.
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • В Blazor, C# и Postgresql я не могу выполнить INSERT INTO с помощью Blazor EditForm.
    Anonymous » » в форуме C#
    0 Ответы
    16 Просмотры
    Последнее сообщение Anonymous
  • Невозможно заменить Bools на INT [закрыто]
    Anonymous » » в форуме C#
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»