@page "/" <style> th, td { vertical-align: middle; } </style> <h3>@metadatas["Title"]</h3> <br/> @if (metadatas != null) { <table class="table table-bordered" style="background-color: @metadatas["Background-color"];"> <thead> <tr> <th scope="col">#</th> <th scope="col" style="width: 150px;">Action</th> <th scope="col" style="width: 150px;">Key</th> <th scope="col">Value</th> </tr> </thead> <tbody> @foreach (var metadata in metadatas) { var keys = metadatas.Keys.ToList(); var index = keys.IndexOf(metadata.Key); <tr> <th scope="row">@(index + 1)</th> <td style="text-align: center;"> <button type="button" class="btn @(Edits[index] ? "btn-secondary" : "btn-primary")" @onclick="@(() => { Edits[index] = !Edits[index]; })"> @(Edits[index] ? "Disable Edit" : "Enable Value") </button> </td> <td>@metadata.Key</td> @if (Edits[index]) { <td><input @bind-value="metadatas[metadata.Key]" type="text" class="form-control" style="background-color: antiquewhite;"/></td> } else { <td>@metadata.Value</td> } </tr> } </tbody> </table> } @code { private Dictionary<string, string> metadatas { get; set; } private bool[] Edits; protected override void OnInitialized() { metadatas = new Dictionary<string, string>(); metadatas.Add("Title", "Make only the selected row editable"); metadatas.Add("Background-color", "white"); // for storing edit status of each dictionary value // this array has to be same length as the dictionary Edits = new bool[metadatas.Count()]; base.OnInitialized(); } }
namespace BlazorFiddleProject { using Microsoft.AspNetCore.Components.Builder; using Microsoft.Extensions.DependencyInjection; public class Startup { public void ConfigureServices(IServiceCollection services) { } public void Configure(IComponentsApplicationBuilder app) { app.AddComponent<App>("app"); } } }
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width"> <title>BlazorFiddleProject</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <script src="_content/MatBlazor/dist/matBlazor.js"></script> <style> app { } </style> <script type="text/javascript"> </script> </head> <body> <app>Loading...</app> <script src="_framework/blazor.webassembly.js"></script> <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script> </body> </html>

Add component

BlazorFiddle was updated from Blazor 0.7 to .NET 6.0. Your old source code could not work. You need to upgrade to latest.