В компоненте Blazor у меня есть эта таблица, в которой я пытаюсь реализовать функцию встроенного редактирования. Я справился с визуальными битами, но когда дело доходит до получения новых значений из измененной строки при нажатии кнопки, я понятия не имею, как поступить.
Каждая строка в таблице основана на этом объекте:
public class InstanceData
{
public Guid Id { get; set; }
public string DisplayName { get; set; }
public string BaseAddress { get; set; }
public int Port { get; set; }
public string Version { get; set; }
public string AdditionalInformation { get; set; }
[JsonIgnore]
public bool IsEditing { get; set; }
}
На моей странице бритвы таблица заполняется следующим образом:
<table>
@*<thead tbody blah blah>*@
@foreach (var instance in serverInstances)
{
if (instance.IsEditing)
{
<tr>
<th scope="row">@instance.GetShortenedIdentifier()</th>
<td>
<input type="text" class="form-control" placeholder="Give the instance a name" value="@instance.DisplayName" />
</td>
<td>
<input type="text" class="form-control" placeholder="e.g. http://localhost (without port)" value="@instance.BaseAddress" />
</td>
<td>
<input type="number" class="form-control" placeholder="The port number server is running on" value="@instance.Port"
min="0" max="65535" />
</td>
<td>
<input type="text" class="form-control" placeholder="For information purposes and not required" value="@instance.Version" />
</td>
<td>
<input type="text" class="form-control" placeholder="Any other details to add (e.g. Feature environment mocks instance)" value="@instance.AdditionalInformation" />
</td>
<td>
<button type="button" class="btn btn-link" @onclick="() => EnableEditing(false, instance)">
<i class="fas fa-window-close" />
</button>
<button type="button" class="btn btn-link" @onclick="() => UpdateInstance(instance)">
<i class="fas fa-check-square" />
</button>
</td>
</tr>
}
else
{
<tr>
<th scope="row">@instance.GetShortenedIdentifier()</th>
<td>@instance.DisplayName</td>
<td>@instance.BaseAddress</td>
<td>@instance.Port</td>
<td>@instance.Version</td>
<td>@instance.AdditionalInformation</td>
<td>
<button type="button" class="btn btn-link" @onclick="() => EnableEditing(true, instance)">
<i class="fas fa-pen" />
</button>
</td>
</tr>
}
</table>
@code {
private void EnableEditing(bool flag, InstanceData instanceData)
{
instanceData.IsEditing = flag;
}
private void UpdateInstance(InstanceData instanceData)
{
EnableEditing(false, instanceData);
//call the repository to update the instance here.
//show toast after done.
}
}
Итак, я пытаюсь получить все эти значения элемента input
для передачи в мой метод на @onclick="() => UpdateInstance(instance)"
действие. Я думал о назначении Id или fiddle с @ref
, но не удалось. Какой правильный способ сделать это, или я подхожу к этому неправильно?
Чтобы визуализировать это, вот кое-что с моими удивительными навыками рисования мс.