2013-03-06 4 views
19

To jest mój kod:ASP MVC Razor kodowania znaków specjalnych zastępczy wejściowego

Model:

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

Widok:

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

To będą renderowane tak:

Twoja firma & # 39; s imię

wyjście 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=""> 

Powinno być wyglądać następująco: nazwa

Twojej firmy

Dlaczego tekst nie wyświetla poprawnie i jak mogę zapobiec temu?

ja już próbowałem to:

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

i ten

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

Twój 'placeholder' jest kodowanie jak:' Twojej Firmy & # 39; s name'? –

+0

Tak, dokładnie tak jak opisano powyżej. – Sebastian

Odpowiedz

36

myślę, że ten post będzie Ci pomóc:

HTML encode decode c# MVC4

Myślę, że istnieją inne sposoby, aby uzyskać takie zachowanie, ale jest to jedna z opcji korzystania z TextBox:

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

Istnieje również HttpUtility.HtmlDecode, który może pomóc w akcji ratowania.

aktualizacja

jeśli owinąć HttpUtility.HtmlDecode wokół uchwytu miejsce:

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

powraca zastępcze jak: placeholder = "spółka ' nazwa Twój"

+0

Opublikowany link nie pomaga. Próbowałem już '@ Html.Raw'. Dla właściwości zastępczej nie działa. – Sebastian

+1

Czy chcesz zakodować obiekt, aby stał się "w polu tekstowym? –

+0

Zgadza się. Zaktualizowałem moje pytanie. – Sebastian

3

Oto displayplaceholderfor pomocnik to będzie zawierało symbol zastępczy bez kodowania.

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

Podczas gdy ten link może odpowiedzieć na pytanie , lepiej umieścić tutaj istotne części odpowiedzi i podać link do odniesienia. Odpowiedzi dotyczące linków mogą stać się nieprawidłowe, jeśli strona z linkami się zmieni. – tsnorri

1

nie łatwiej byłoby po prostu pominąć przy użyciu Html.DisplayNameFor? Dekodowanie i ponowne kodowanie tekstu wydaje się zbędne.

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