Почему мой код не освежает должным образом при вызове StateHaschange?C#

Место общения программистов C#
Ответить
Anonymous
 Почему мой код не освежает должным образом при вызове StateHaschange?

Сообщение Anonymous »

У меня есть страница, которая хранит пары значений ключей и позволяет добавлять новые пары значений ключей в существующий список. Вы не можете удалить или изменить существующие пары, но вы можете обновить значения. Чтобы сделать это визуально очевидным, отключенные входные коробки показывают в более темном оттенке серого до редактируемых коробок.
Это мой текущий код, он проверяет, если это то, что это за это /> `@foreach (var inment in editableprompts)
{
var isnew = string.isnullorwhitespace (reffice.key) || Quick.key.StartSwith ("new __");
var isdisabled =! isnew;
var bgcolor = isdisabled? AdminPortalColors.gray: AdminPortalColors.lightgray; < /p>






@if (isNew)
{



Save

< /code>
Это затем обновляется с помощью логики, стоящей за onclick для сохранения: < /p>
private void SaveNewPrompt()
{
if (editablePrompts == null) return;

var latestSet = promptSets
.Where(p => p.InstanceId.Equals(promptId, StringComparison.OrdinalIgnoreCase))
.OrderByDescending(p => p.Version)
.FirstOrDefault();

if (latestSet == null)
{
latestSet = new PromptSet
{
InstanceId = promptId ?? "unknown",
Version = 1,
DateCreated = DateTime.UtcNow,
Prompts = new Dictionary()
};
promptSets.Add(latestSet);
}

latestSet.Prompts.Clear();

var keys = new HashSet(StringComparer.OrdinalIgnoreCase);

foreach (var prompt in editablePrompts)
{
var key = prompt.Key?.Trim();
var value = prompt.Value;

if (string.IsNullOrWhiteSpace(key))
{
// Skip empty keys
continue;
}

if (!keys.Add(key))
{
// Skip duplicates
continue;
}

latestSet.Prompts[key] = value;
}

promptsDict = new Dictionary(latestSet.Prompts);
editablePrompts = promptsDict
.Select(kvp => new EditablePrompt { Key = kvp.Key, Value = kvp.Value })
.ToList();

StateHasChanged();
}
< /code>
Мое ожидание состояло в том, что по вызову состояния изменилось, оно позвонит для негоинициализированного метода моего текстового компонента, стоящего за ним? Однако кажется, что он накапливается прямо в Onchange, что означает, что цвет не обновляется. < /P>
@using System.ComponentModel.DataAnnotations
@inject IJSRuntime JsRuntime

@Label



@code {

[Parameter]
public Func OnChangeTextAsync { get; set; } = null;

[Parameter]
public Action OnChangeText { get; set; } = null;

[Parameter]
public bool SizeSmall { get; set; } = false;

[Parameter]
[Required]
public string Label { get; set; } = string.Empty;

[Parameter]
public string PlaceHolder { get; set; }

[Parameter]
public string Value { get; set; }

[Parameter]
public string HtmlId { get; set; }

[Parameter]
public LabelColor { get; set; }= LightGray;

[Parameter]
public BackgroundColor { get; set; }= LightGray;

[Parameter] public bool MaintainValue { get; set; } = false;

///
/// If true the input will be disabled
///
[Parameter] public bool Disabled { get; set; } = false;

private string _inputClass = string.Empty;
private string _containerClass = string.Empty;

protected override void OnInitialized()
{
HtmlId = string.IsNullOrEmpty(HtmlId) ? Label.Replace(" ", "-") + "-input": HtmlId;

if (string.IsNullOrEmpty(PlaceHolder))
{
PlaceHolder = $"Introduce {Label}";
}

if (string.IsNullOrWhiteSpace(Value))
{
Value = string.Empty;
}

if (!Disabled && !MaintainValue && string.IsNullOrWhiteSpace(Value))
{
Value = string.Empty;
}

_containerClass += $"box flex align-left {GetBackgroundClass(BackgroundColor)}";
_inputClass += $"{GetBackgroundClass(BackgroundColor)}";

if (SizeSmall)
{
_inputClass += " small-select-input margin-tb-stage";
}
}

private async Task OnChange(string value)
{
Value = value;
if (OnChangeTextAsync is not null)
{
await OnChangeTextAsync(value);
}
else if (OnChangeText is not null)
{
OnChangeText(value);
}
}

}
< /code>
Как это исправить? Является ли единственный ответ на обновление OnChange, который также принимает значение цвета фона? Или есть лучший способ, которым я не осознаю?

Подробнее здесь: https://stackoverflow.com/questions/797 ... haschanged
Ответить

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

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

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

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

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