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
Supportare la sessione affinity di Azure App Service con Application Gateway
Eliminare una project wiki di Azure DevOps
Utilizzare Azure AI Studio per testare i modelli AI
Triggerare una pipeline su un altro repository di Azure DevOps
Change tracking e composition in Entity Framework
Eseguire i worklow di GitHub su runner potenziati
Utilizzare l nesting nativo dei CSS
Combinare Container Queries e Media Queries
Proteggere le risorse Azure con private link e private endpoints
Utilizzare il metodo Index di LINQ per scorrere una lista sapendo anche l'indice dell'elemento
Utilizzare EF.Constant per evitare la parametrizzazione di query SQL
Filtering sulle colonne in una QuickGrid di Blazor