ASP.NET MVC incapsula all'interno dell'oggetto ModelMetadata tutte le informazioni relative al model e alle sue proprietà, in modo che possano essere sfruttate da editor e html helper. Questa classe contiene proprietà dai nomi piuttosto esplicativi, come DisplayName, IsRequired, Description, che per default vengono valorizzate in base alle data annotation con cui abbiamo decorato il nostro modello.
In particolare, la proprietà Watermark è agganciata a Display.Prompt e può essere utilizzata per indicare un testo che inviti all'input e ne descriva le caratteristiche:
[DataType(DataType.EmailAddress)] [Display(Name = "Indirizzo email", Prompt = "name@domain")] public string Email { get; set; }
Questa proprietà è ignorata da tutti gli helper e i template inclusi all'interno di ASP.NET MVC, ma ciò non toglie che possiamo sfruttarla tramite un helper personalizzato. Per esempio possiamo creare un overload di TextBoxFor simile al seguente:
public static MvcHtmlString TextBoxFor<TModel, TProperty>( this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes, bool includePlaceholder) { var attributes = new RouteValueDictionary(htmlAttributes); if (includePlaceholder) { var metadata = ModelMetadata.FromLambdaExpression( expression, htmlHelper.ViewData); attributes["placeholder"] = metadata.Watermark; } return htmlHelper.TextBoxFor<TModel, TProperty>(expression, attributes); }
Questo helper prevede un parametro addizionale includePlaceholder. Quando vale true, non facciamo altro che recuperare i metadati della proprietà specificata e aggiungere un attributo placeholder con il testo indicato nel watermark. Il risultato sarà un editor molto più comprensibile e friendly per l'utente:
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Autenticarsi in modo sicuro su Azure tramite GitHub Actions
Gestire domini wildcard in Azure Container Apps
Ottenere un token di accesso per una GitHub App
Le novità di Angular: i miglioramenti alla CLI
Utilizzare i primary constructor in C#
Generare la software bill of material (SBOM) in GitHub
Ordinare randomicamente una lista in C#
Criptare la comunicazione con mTLS in Azure Container Apps
Code scanning e advanced security con Azure DevOps
Gestione dei nomi con le regole @layer in CSS
Evitare il flickering dei componenti nel prerender di Blazor 8
Eseguire query per recuperare il padre di un record che sfrutta il tipo HierarchyID in Entity Framework
I più letti di oggi
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Creare una libreria CSS universale: Cards
- Eseguire script pre e post esecuzione di un workflow di GitHub