Создать Html.MyControlFor - PullRequest
       12

Создать Html.MyControlFor

0 голосов
/ 05 февраля 2011

Привет,

Я реализую всплывающую подсказку jquery на своем сайте MVC 2, и чтобы упростить задачу, я создал специальный атрибут для украшения свойств (например, Display).Моя мысль состоит в том, чтобы заполнить всплывающую подсказку текстом из этого атрибута.

Теперь мне нужен помощник Html.ToolTipFor (model => mode.MyProperty).Я начал с этого:

public static string ToolTipFor(this HtmlHelper htmlHelper, Expression<Func<AdRegister, bool>> action)
        {}

Но я не уверен, что это правильный путь, я хочу использовать этот помощник на других страницах, кроме AdRegister.

Я, конечно, сделалпару помощников раньше, но не с выражением в качестве параметра.

Я думаю, что здесь нужно прочитать атрибут с отражением и таким образом сгенерировать код для всплывающей подсказки.

Просьба помочь

BestRegards

1 Ответ

1 голос
/ 06 февраля 2011

Модель:

public class TestModel
{
    [Display(Name = "Mighty title", Description = "Mighty tooltip")]
    public string Title { get; set; }
}

Расширение:

public static IHtmlString TooltipFor<TModel, TValue>(this HtmlHelper<TModel> self, Expression<Func<TModel, TValue>> expression)
{
    var metadata = ModelMetadata.FromLambdaExpression(expression, self.ViewData);

    var span = new TagBuilder("span");
    span.Attributes.Add("title", metadata.Description);
    span.Attributes.Add("class", "tooltip");

    span.SetInnerText(metadata.DisplayName);

    return MvcHtmlString.Create(span.ToString());
}

Использование:

@Html.TooltipFor(m => m.Title)
or
<%: Html.TooltipFor(m => m.Title) %>

Обратите внимание на использование IHtmlString и TModel и TValue.IHtmlString позволяет записывать вывод html без использования <% = или @ Html.Raw.TModel и TValue позволяют использовать его на любом свойстве любой модели. </p>

...