Creating custom attribute is pretty simple really, just follow the example. You need to return MvcHtmlString – that is string with your html to be displayed on a page – this will not be escaped.
public static MvcHtmlString DisplayWithNameFor<TModel, TProperty>(
this HtmlHelper<TModel> htmlHelper,Expression<Func<TModel, TProperty>> expression)
{
ModelMetadata metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
if (metaData.Model == null)
{
return MvcHtmlString.Create(String.Empty);
}
string html = "<div class=\"display-label\">";
html += htmlHelper.LabelFor(expression).ToString();
html += "</div><div class=\"display-field\">";
html += htmlHelper.DisplayFor(expression).ToString();
html += "</div>";
return MvcHtmlString.Create(html);
}