Подтвердить что ты не робот

ASP MVC Razor кодирует специальные символы на вкладке ввода

Это мой код:

Модель:

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

Вид:

@Html.TextBoxFor(m => m.CompanyName, new { @class = "account-input", @placeholder = @Html.DisplayNameFor(m => m.CompanyName), @id = "companyname" })

Он будет отображаться следующим образом:

Название вашей компании & # 39;

html output:

<input class="account-input" data-val="true" data-val-required="The Your company name field is required." id="companyname" name="CompanyName" placeholder="Your company&amp;#39;s name" type="text" value="">

Он должен выглядеть следующим образом:

Название вашей компании

Почему текст не отображается правильно и как я могу предотвратить это?

Я уже пробовал это:

@Html.TextBoxFor(m => m.CompanyName, new { @class = "account-input", @placeholder = @Html.Raw(@Html.DisplayNameFor(m => m.CompanyName)), @id = "companyname" })

и этот

@Html.TextBoxFor(m => m.CompanyName, new { @class = "account-input", @placeholder = @Html.Encode(@Html.DisplayNameFor(m => m.CompanyName)), @id = "companyname" })
4b9b3361

Ответ 1

Я думаю, что этот пост поможет вам:

декодирование HTML-кода С# MVC4

Я думаю, что есть другие способы получить это поведение, но это один из вариантов использования TextBox:

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

Существует также HttpUtility.HtmlDecode, что может помочь в нашем действии сохранения.

Обновление

если вы оберните HttpUtility.HtmlDecode вокруг своего владельца места:

@Html.TextBoxFor(m => m.CompanyName, new { @class = "account-input", 
@placeholder = HttpUtility.HtmlDecode(Html.DisplayNameFor(x => x.CompanyName).ToHtmlString()), 
@id = "companyname" })

Заполнитель возвращается как:   placeholder = "Название вашей компании"

Ответ 2

Здесь помощник-хранитель экрана, который будет содержать заполнитель без кодирования.

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()));
   }
}

Ответ 3

Не было бы проще просто пропустить использование Html.DisplayNameFor? Декодирование и повторное кодирование текста кажется ненужным.

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);
}