Joa*_*kim 31 asp.net razor asp.net-mvc-3
如果我的模特有
[DisplayName("First Name")]
public string firstName { get; set; }
Run Code Online (Sandbox Code Playgroud)
然后我可以在View with LabelFor中打印它
@Html.LabelFor(model => model.acc_first)
Run Code Online (Sandbox Code Playgroud)
它将呈现为
<label for="firstName">First Name</label>
Run Code Online (Sandbox Code Playgroud)
Bui*_*ted 13
要访问属性,您需要一个自定义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);
}
Run Code Online (Sandbox Code Playgroud)
对于不属于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;
}
}
Run Code Online (Sandbox Code Playgroud)
神奇的事情发生在OnMetadataCreated实现中.在这里,我们可以使用我们特定属性所需的任何东西填充AdditionalValues.在这种情况下,我们添加了一个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("");
}
Run Code Online (Sandbox Code Playgroud)
您可以通过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;
Run Code Online (Sandbox Code Playgroud)
然后displayname
将First Name
在您的上下文中具有值.
基于 Darren Oster 的回答:
@Html.DisplayNameFor(x => x.acc_first)
Run Code Online (Sandbox Code Playgroud)
这是指向此文档的链接: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);
}
Run Code Online (Sandbox Code Playgroud)
Nik*_*hep -4
@(This.Model.acc_first)
应该管用
所以在javascript中你可以像这样使用它
function callme(val)
{
//some ajax call with
@(This.Model.acc_first)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35296 次 |
最近记录: |