Come sappiamo, quando vogliamo disabilitare un elemento di input in pagina, specificare l'attributo disabled sfruttando un apposito overload degli html helper di ASP.NET MVC:
@Html.TextBoxFor(x => x.FirstName, new { disabled = "disabled" })
In particolare, questi metodi richiedono un anonymous type, il cui utilizzo può risultare scomodo se la disabilitazione deve avvenire in base a una particolare condizione del View Model (per esempio l'utente ha privilegi di sola lettura sul dato). In questi casi, un helper come quello seguente migliora sensibilmente la situazione:
public static class Utilities { public static RouteValueDictionary DisableWhen(this object source, bool condition) { var result = HtmlHelper.AnonymousObjectToHtmlAttributes(source); if (condition) { result.Add("disabled", "disabled"); } return result; } }
Si tratta di un extension method della classe object, da applicare quindi all'anonymous type definito per gli attributi, che inizialmente trasforma l'oggetto in input nel corrispondente RouteValueDictionary di coppie chiave-valore e che, successivamente, aggiunge l'attributo disabled nel caso la condizione sia verificata.
Grazie a questo metodo, il codice da scrivere sulla view diventa davvero semplice e di immediata compresione:
@Html.TextBoxFor(x => x.SomeField, new { @class = "myClass" }.DisableWhen(this.Model.CanEdit)) />
L'effetto finale di emettere un oggetto disabled in pagina è che il suo contenuto viene ignorato dal browser in fase di post. Attenzione però a non fidarsi mai dell'input proveniente dal browser e a verificare la condizione anche lato server, visto che comunque l'utente potrebbe aver modificato il markup della pagina o inviato manualmente la form.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Eseguire una ricerca avanzata per recuperare le issue di GitHub
Disabilitare automaticamente un workflow di GitHub
Miglioramenti nell'accessibilità con Angular CDK
Code scanning e advanced security con Azure DevOps
Sfruttare al massimo i topic space di Event Grid MQTT
Creare una libreria CSS universale: i bottoni
Recuperare l'ultima versione di una release di GitHub
Effettuare il refresh dei dati di una QuickGrid di Blazor
Eseguire le GitHub Actions offline
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core