Un helper per gestire la disabilitazione di un controllo in ASP.NET MVC

di Marco De Sanctis, in ASP.NET MVC,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi