Попытка изменить конструктор для стилизации текста в атрибуте DataAnnotation [Display (Name = "Text")] - PullRequest
0 голосов
/ 22 марта 2012

Я задал вопрос и получил отличный ответ для своей конкретной проблемы, но столкнулся с проблемой со списками <select>, используя <label> и пытаясь присвоить атрибуту DataAnnotation [Display(Name="Text")] что-то вроде [Display(Name="Text <span class=\"myclass\">Special styled text</span>.")].

Вот ссылка Вопрос / Ответ .

В ответе рассказывается о кодировке Html и представлено решение для помощника Html.LabelFor. Это сработало идеально для моей непосредственной ситуации. Однако позже я обнаружил, что, поскольку я использую код для создания списков <select>, новый помощник не выбирается им. Любая помощь очень ценится. Вот код <select>, который я использую:

public MvcHtmlString BuildInput(string fieldName, 
    SelectListItem item, string inputType)
{
    var id = ViewData.TemplateInfo.GetFullHtmlFieldId(item.Value);
    var wrapper = new TagBuilder("div");
    wrapper.AddCssClass("selector-item");

    var input = new TagBuilder("input");
    input.MergeAttribute("type", inputType);
    input.MergeAttribute("name", fieldName);
    input.MergeAttribute("value", item.Value);
    input.MergeAttribute("id", id);

    input.MergeAttributes(Html.GetUnobtrusiveValidationAttributes
        (fieldName, ViewData.ModelMetadata));

    if(item.Selected)
        input.MergeAttribute("checked", "checked");

    wrapper.InnerHtml += input.ToString(TagRenderMode.SelfClosing);


    var label = new TagBuilder("label"); // tried merging code around 
                                         // here but got it all wrong
    label.MergeAttribute("for", id);
    label.SetInnerText(item.Text);
    wrapper.InnerHtml += label;

    return new MvcHtmlString(wrapper.ToString());
}

Как я указал в коде, я пытался объединить вспомогательный код, но не смог сделать его правильно.

Опять же, любая помощь приветствуется.

1 Ответ

0 голосов
/ 22 марта 2012

Просто замените:

label.SetInnerText(item.Text);

на:

label.InnerHtml = item.Text;
...