MVC3, Rasoir, Html.TextAreaFor(): permet de régler la hauteur pour s'adapter à contenu
Je suis actuellement en utilisant le code suivant dans la Vue de régler la hauteur de un Html.TextAreaFor() pour s'adapter à son contenu. Est-il nettement mieux &/ou moins verbeux pour ce faire?
...
int width = 85;
int lines = 1;
string[] arr = Model.Text.Split(new string[] {"\r\n", "\n", "\r"}, StringSplitOptions.None);
foreach (var str in arr)
{
if (str.Length / width > 0)
{
lines += str.Length / width + (str.Length % width <= width/2 ? 1 : 0);
}
else
{
lines++;
}
}
@Html.TextAreaFor(m => m.Text,
new
{
id = "text",
style = "width:" + width + "em; height:" + lines + "em;"
})
...
OriginalL'auteur Handprint | 2012-04-18
Vous devez vous connecter pour publier un commentaire.
Le code a l'air bien. Une amélioration possible serait d'externaliser dans une réutilisables de l'aide pour éviter de polluer la vue:
et dans la vue:
Réutilisable, rend la maintenance plus facile, et unclutters la vue... et fonctionne comme un charme! Juste eu à ajouter de l'aide de directives: en utilisant le Système.Web.Routage; l'utilisation de Système.Web.Mvc; à l'aide de System.Web.Mvc.Html; l'utilisation de Système.Linq.Expressions;
OriginalL'auteur Darin Dimitrov
Qui a de l'allure,
vous pouvez également utiliser le JQuery croissance automatique textarea plugin.
Il va vous faire économiser de codage, et peut-être même plus efficace.
OriginalL'auteur Har
Vous pouvez réduire ce phénomène à une ligne avec quelques LINQ magie:
Noter qu'il y a un petit problème avec la façon dont vous êtes fractionnement. Si il y a vraiment mélangés
\n
,\r
, et\r\n
les fins de ligne dans votre entrée (peu probable), ce split split dans l'ordre de gauche à droite, de sorte qu'il ne sera jamais divisée sur la chaîne\r\n
, qui se traduira par une ligne vide entre les\r
et la\n
. Donc, vous allez voir que j'ai déplacé la\r\n
comme la première chaîne de la scission.Merci pour la correction. Compact et fonctionne! Utilisé en conjonction avec Darin réponse.
OriginalL'auteur Ethan Brown