ASP MVC Razor encodent des caractères spéciaux dans l'espace réservé à l'entrée

C'est mon code:

Modèle:

[Required]
[DataType(DataType.Text)]
[Display(Name = "Your company's name")]
public string CompanyName { get; set; }

:

@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&amp;#39;s name" type="text" value="">

Il devrait ressembler à ceci:

nom de votre entreprise

pourquoi le le texte ne rend 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 ce

@Html.TextBoxFor(m => m.CompanyName, new { @class = "account-input", @placeholder = @Html.Encode(@Html.DisplayNameFor(m => m.CompanyName)), @id = "companyname" })
20
demandé sur Sebastian 2013-03-06 15:42:56

3 réponses

je pense que ce post vous aidera:

HTML code decode c# MVC4

je pense qu'il y a d'autres façons d'obtenir ce comportement, mais c'est une option d'utiliser la boîte de texte:

@Html.TextBox("CompanyName", HttpUtility.HtmlEncode("Your company&#39;s name"))

il y a aussi HttpUtility.HtmlDecode , qui pourrait aider avec notre action de sauvetage.

mise à jour

si vous enveloppez HttpUtility.HtmlDecode autour de votre place titulaire:

@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: placeholder="nom de Votre entreprise"

41
répondu Luke Duddridge 2017-06-20 10:06:42

voici un helper displayplaceholder pour qui présentera placeholder sans encodage.

http://www.davidberube.me/displayplaceholderfor-mvc-placeholder-for-special-characters /

-- EDIT --

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()));
   }
}
4
répondu David Bérubé 2017-06-20 10:07:53

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);
}
1
répondu Sven-Erik Jonsson 2017-06-20 10:08:32