Как оказалось, есть как минимум два отдельных решения для поставленного мною вопроса.
Добавление всплывающих подсказок к моделям MVC
В этом случае я создал и метод расширения для расширения встроенногов HtmlHelper.
public static MvcHtmlString TextBoxWithTooltipFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, IDictionary<string, object> htmlAttributes = null)
{
var metaData = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
if (htmlAttributes == null)
{
htmlAttributes = new Dictionary<string, object> { { TITLE_ATTRIBUTE_NAME, metaData.Description } };
}
else
{
if (!string.IsNullOrEmpty(metaData.Description) && !htmlAttributes.Keys.Contains(TITLE_ATTRIBUTE_NAME))
htmlAttributes.Add(TITLE_ATTRIBUTE_NAME, metaData.Description);
}
return helper.TextBoxFor(expression, htmlAttributes);
}
Вот как Model может выглядеть
[Display(ResourceType = typeof(Resources.Resources), Name = "FirstNameLabel", Description = "FirstNameTooltip")]
public string FirstName { get; set; }
Вот как вы можете использовать это в Razor
@Html.TextBoxWithTooltipFor(m => m.FirstName, new { type = "text", required = string.Empty })
Добавление водяных знаков
Мне не удалось элегантно использовать атрибуты Model , поэтому я выбрал решение JQuery ,Вот JQuery , который я изменил из некоторых других образцов подобных шаблонов
$.fn.Watermark = function (text) {
return this.each(
function () {
//This ensures Diacritic characters are encoded correctly
text = $('<span>' + text + '</span>').text();
var input = $(this);
map[map.length] = { text: text, obj: input };
function clearMessage() {
if (input.val() == text)
input.val("");
input.removeClass("watermark");
}
function insertMessage() {
if (input.val().length == 0 || input.val() == text) {
input.val(text);
input.addClass("watermark");
} else
input.removeClass("watermark")
}
input.focus(clearMessage);
input.blur(insertMessage);
input.change(insertMessage);
insertMessage();
}
);
};
Вот мой CSS для стиля водяного знака
fieldset input[type="tel"].watermark,
fieldset input[type="email"].watermark,
fieldset input[type="text"].watermark,
fieldset input[type="password"].watermark {
color : #9B9B9B;
font-size: 0.7em;
font-style: italic;
}
Вот как вы можете использовать это в Razor
$("#FirstName").Watermark("@Resources.FirstNameWatermark");
Примечание : убедитесь, что вы очистили водяные знакиперед отправкой формы это можно сделать с помощью варианта JQuery , который я поставил выше и который используется следующим образом:
$('#Application').submit(function () {
$.Watermark.RemoveAll();
return true;
});