C# 在#MVC3中,有没有一种方法可以使用DataAnnotations属性添加HTML5占位符属性?
这是我的模型C# 在#MVC3中,有没有一种方法可以使用DataAnnotations属性添加HTML5占位符属性?,c#,asp.net-mvc,html,asp.net-mvc-3,C#,Asp.net Mvc,Html,Asp.net Mvc 3,这是我的模型 public class ValidationModel { #region Properties [Display(Prompt = "type a PostCode here")] public string PostCode { get; set; } } 这就是我的观点 @using (Html.BeginForm()) { @Html.LabelFor(m => m.PostCode) @Html.TextBoxFor(
public class ValidationModel
{
#region Properties
[Display(Prompt = "type a PostCode here")]
public string PostCode { get; set; }
}
这就是我的观点
@using (Html.BeginForm())
{
@Html.LabelFor(m => m.PostCode)
@Html.TextBoxFor(m => m.PostCode)
}
有没有办法让它渲染
<input data-val="true" id="PostCode" name="PostCode" placeholder="type a PostCode here" type="text" value="" />
即使从文档中我可以清楚地看到Display Prompt应该完成这项工作,我也无法使其工作我不能100%确定,但看起来水印已经进入元数据代码(有一种明确的标准方法来定义与属性相关的字符串)但不是视图代码,因为在客户端还没有一种普遍支持的处理水印的方法
@Html.TextBoxFor(m => m.PostCode,
new { placeholder = "type a postcode ..." } )
如果手动添加属性不起作用,最好的选择可能是创建一个新的HTML帮助程序Html5TextBoxFor,并使用它而不是标准的TextBoxFor
在该帮助程序中,您可以使用ModelMetadata.FromLambdaExpression获取提示文本,然后调用TextBoxFor以使用从元数据生成的自定义html属性对象。您还可以创建自己的HtmlHelper扩展方法,如本文所述:
我需要这个确切的功能,但我不想到处改变我的
编辑器,让与众不同(我有很多页面:)
为了实现这一点,我只需为字符串
创建一个EditorTemplate
(如果需要,可以对其他类型执行此操作)
基于我的模型属性,我使用DisplayName
,如下所示:
[DisplayName("Client Name")]
public string ClientName { get; set; }
模板只是:
@model string
@Html.TextBoxFor(m => m, new { @placeholder = ViewData.ModelMetadata.DisplayName })
然后我的电话号码保持不变:
@Html.EditorFor(m => m.FirstName)
此外,您还可以在非HTML5浏览器上使用该精确的代码。我所做的只是添加了一个脚本引用,我的所有占位符甚至都可以在IE6中使用(!!!!)。尽管您可能从来没有这样做过,但作为概念证明,您可以这样做:
型号:
[Required, Display(Description = "Type your note here...")]
public string Note { get; set; }
视图:
razor视图中的任何html属性都可以通过在@html.control
中使用new{}指定属性值添加到html帮助程序中
关键字然后通过以@
符号开始定义属性如果您在razor中使用表示html属性的保留关键字,如类
,则需要在该单词之前添加@
,与razor引擎处理html DOM元素的方式相同,例如:
@Html.TextBoxFor(x => x.Name, new { @class = "form-control", placeholder = "Your Name" } )
是的,我看到了,但我想在模型上使用DataAnnotation属性(显示提示),我不想从视图中添加占位符属性。请访问我们的网站请求此操作。如果有,请告诉我。
@Html.TextBoxFor(x => x.Name, new { @class = "form-control", placeholder = "Your Name" } )