Rendering special characters in readonly input field

439 Views Asked by At

In ASP.NET MVC application i'm using TagBuilder to create readonly input field.

public class DisplayTextFieldBuilder<TModel, TProperty>
{
    private HtmlHelper<TModel> _helper;
    private Expression<Func<TModel, TProperty>> _expression;

    public DisplayTextFieldBuilder(HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression)
    {
        _helper = helper;
        _expression = expression;            
    }

    public override string ToString()
    {        

        var id = _helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(_expression));
        var name = _helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(_expression));

        var value = HttpUtility.HtmlEncode(_helper.DisplayFor(_expression).ToString());         

        TagBuilder builder = new TagBuilder("input");
        builder.MergeAttribute("value", value);
        builder.MergeAttribute("id", id);
        builder.MergeAttribute("name", name);            
        builder.MergeAttribute("readonly", "readonly");                        

        var html = builder.ToString(TagRenderMode.SelfClosing);            

        return html;
    }

However certain string does not render properly. For example, lets say the model property value is Foe`s BBQ (note it has apostrophe)
then

HttpUtility.HtmlEncode(_helper.DisplayFor(_expression).ToString())

renders this value as Foe&amp;#39;s, BBQ

if i remove html encoding then

 _helper.DisplayFor(_expression).ToString()

renders this value as Foe&#39;s, BBQ

what i am missing?

0

There are 0 best solutions below