Voici mon code:
Modèle:
[Required]
[DataType(DataType.Text)]
[Display(Name = "Your company's name")]
public string CompanyName { get; set; }
Vue:
@Html.TextBoxFor(m => m.CompanyName, new { @class = "account-input", @placeholder = @Html.DisplayNameFor(m => m.CompanyName), @id = "companyname" })
Il sera rendu comme ceci:
Nom de votre entreprise
sortie html:
<input class="account-input" data-val="true" data-val-required="The Your company's name field is required." id="companyname" name="CompanyName" placeholder="Your company&#39;s name" type="text" value="">
Cela devrait ressembler à ceci:
Nom de votre entreprise
Pourquoi le texte ne s'affiche-t-il pas correctement et comment puis-je éviter cela?
J'ai déjà essayé ceci:
@Html.TextBoxFor(m => m.CompanyName, new { @class = "account-input", @placeholder = @Html.Raw(@Html.DisplayNameFor(m => m.CompanyName)), @id = "companyname" })
et ça
@Html.TextBoxFor(m => m.CompanyName, new { @class = "account-input", @placeholder = @Html.Encode(@Html.DisplayNameFor(m => m.CompanyName)), @id = "companyname" })
Je pense que ce message vous aidera:
Je pense qu'il existe d'autres façons d'obtenir ce comportement, mais c'est une option d'utilisation de TextBox:
@Html.TextBox("CompanyName", HttpUtility.HtmlEncode("Your company's name"))
Il y a aussi HttpUtility.HtmlDecode
, ce qui pourrait vous aider dans notre action de sauvegarde.
mise à jour
si vous enveloppez HttpUtility.HtmlDecode
autour de votre espace réservé:
@Html.TextBoxFor(m => m.CompanyName, new { @class = "account-input",
@placeholder = HttpUtility.HtmlDecode(Html.DisplayNameFor(x => x.CompanyName).ToHtmlString()),
@id = "companyname" })
l'espace réservé retourne comme suit: espace réservé = "Nom de votre entreprise"
Voici un espace réservé d'aide pour l'affichage qui présentera un espace réservé sans encodage.
http://www.davidberube.me/displayplaceholderfor-mvc-placeholder-for-special-characters/
-- ÉDITER --
public static partial class Extensions
{
public static MvcHtmlString DisplayPlaceHolderFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
var result = html.DisplayNameFor(expression).ToHtmlString();
return new MvcHtmlString(System.Web.HttpUtility.HtmlDecode(result.ToString()));
}
}
Ne serait-il pas plus facile de simplement sauter en utilisant Html.DisplayNameFor? Décoder et ré-encoder le texte semble inutile.
public static MvcHtmlString DisplayPlaceHolderFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
{
var metaData = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
var resolvedDisplayName = metaData.DisplayName ?? metaData.PropertyName;
if (!string.IsNullOrEmpty(resolvedDisplayName))
return new MvcHtmlString(resolvedDisplayName);
var htmlFieldName = ExpressionHelper.GetExpressionText(expression);
resolvedDisplayName = htmlFieldName.Split('.').Last();
return new MvcHtmlString(resolvedDisplayName);
}