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
Gestione degli stili CSS con le regole @layer
Triggerare una pipeline su un altro repository di Azure DevOps
.NET Conference Italia 2024
Creare un webhook in Azure DevOps
Utilizzare WhenEach per processare i risultati di una lista di task
Generare una User Delegation SAS in .NET per Azure Blob Storage
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
Utilizzare gRPC su App Service di Azure
Configurare lo startup di applicazioni server e client con .NET Aspire
Gestire gli accessi con Token su Azure Container Registry
Cambiare la chiave di partizionamento di Azure Cosmos DB