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 を使用する 1 つのオプションです。

@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 に答える