Ответ 1
@Html.DisplayNameFor(x => x.acc_first)
Если у моей модели есть
[DisplayName("First Name")]
public string firstName { get; set; }
Затем я могу напечатать его в представлении с LabelFor
@Html.LabelFor(model => model.acc_first)
Затем он будет отображаться как
<label for="firstName">First Name</label>
@Html.DisplayNameFor(x => x.acc_first)
Чтобы получить доступ к атрибутам, вам понадобится специальный Html
помощник. Поскольку атрибуты на самом деле не являются частью свойства или модели, вам нужно обратиться туда, чтобы получить доступ к ним.
public static IHtmlString DisplayName<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression) {
var metadata = ModelMetadata.FromLambdaExpression<TModel, TValue>(expression, html.ViewData);
return new HtmlString(metadata.DisplayName);
}
Для дополнительных атрибутов, которые не являются частью DataAnnotations, вы можете сделать следующее:
Создайте собственный атрибут
public class TooltipAttribute : Attribute, IMetadataAware {
public TooltipAttribute(string tooltip) {
this.Tooltip = tooltip;
}
public string Tooltip { get; set; }
public void OnMetadataCreated(ModelMetadata metadata) {
metadata.AdditionalValues["Tooltip"] = this.Tooltip;
}
}
Магия происходит в реализации OnMetadataCreated. Здесь мы можем заполнить дополнительныеValues всем необходимым для нашего конкретного атрибута. В этом случае добавлялся ключ всплывающей подсказки. Ваше имя должно быть уникальным, поскольку другие атрибуты или поставщики могут добавлять свои собственные ключи с тем же именем. Важно помнить, что атрибуты не всегда читаются в том же порядке. Таким образом, ваш атрибут tooltip можно назвать первым, последним или где-то посередине. Это важное различие, поскольку оно может вызвать нежелательные эффекты.
Затем создайте настраиваемый вспомогательный атрибут
public static IHtmlString TooltipFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression) {
var metadata = ModelMetadata.FromLambdaExpression<TModel, TValue>(expression, html.ViewData);
if (metadata.AdditionalValues.ContainsKey("Tooltip"))
return new HtmlString((string)metadata.AdditionalValues["Tooltip"]);
return new HtmlString("");
}
Вы можете получить доступ к значению атрибута Display(Name="...")
за 4 шага:
var type = typeof(YourNamespace.Models.YourModelName);
var memInfo = type.GetMember("firstName"); // your member
var attributes = memInfo[0].GetCustomAttributes(typeof(System.ComponentModel.DataAnnotations.DisplayAttribute), false);
var displayname = ((System.ComponentModel.DataAnnotations.DisplayAttribute)attributes[0]).Name;
Тогда displayname
будет иметь значение First Name
в вашем контексте.
На основе ответа Даррена Остера:
@Html.DisplayNameFor(x => x.acc_first)
Вот ссылка на документацию для этого: https://msdn.microsoft.com/en-us/library/system.web.mvc.html.displaynameextensions.displaynamefor(v=vs.118).aspx
Вы можете использовать это в своем коде вида следующим образом:
@{
var foo = Html.DisplayNameFor(x => x.acc_first);
// call function
DoStuff(foo);
}
вам следует просто использовать
[Display(Name = "First Name")]
public string name{ get; set; }
<label asp-for="firstName">First Name</label>
вы должны перейти на asp-for
@Html.DisplayFor(model => model.acc_first)
должен работать на вас. Если нет, попробуйте просто
@Model.acc_first
Либо один должен работать нормально.
@(This.Model.acc_first)
Должен работать
поэтому в javascript вы можете использовать его как
function callme(val)
{
//some ajax call with
@(This.Model.acc_first)
}