25

这是我的代码:

模型:

[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" })

它将呈现如下:

您的公司名称

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="">

它应该是这样的:

贵公司的名称

为什么文本无法正确呈现,我该如何防止这种情况?

我已经尝试过了:

@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" })
4

3 回答 3

49

我认为这篇文章会帮助你:

HTML编码解码c#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="Your company's name"

于 2013-03-06T12:49:24.127 回答
4

这是一个助手 displayplaceholderfor ,它将在没有编码的情况下显示占位符。

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

- 编辑 -

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()));
   }
}
于 2015-04-28T19:37:41.757 回答
1

跳过使用 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);
}
于 2016-02-11T15:25:19.240 回答