Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在#MVC3中,有没有一种方法可以使用DataAnnotations属性添加HTML5占位符属性?_C#_Asp.net Mvc_Html_Asp.net Mvc 3 - Fatal编程技术网

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" } )