如何在MVC 4中自动添加占位符属性到HTML输入类型为数字的元素?

9

这是一个非常特定的问题。我成功地通过使用名为EmailAddress.cshtml的编辑器模板,在~/Views/Shared/EditorTemplates/文件夹中保存,自动添加了placeholder属性到html5电子邮件输入类型。请参见以下代码:

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", placeholder = ViewData.ModelMetadata.Watermark })

这能够正常工作是因为我在视图模型中使用了[DataType(DataType.EmailAddress)]数据注解。

但当我使用int?变量时,它就不能正常工作。

public class MiageQuotaRequestViewModel
{
    [Required]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Nombre de place demandées", Prompt = "Nombre de place")]
    [Range(0, 50, ErrorMessage = "La demande doit être comprise entre 0 et 50 places")]
    public int? RequestedQuota { get; set; }
}

@Html.EditorFor 将此输入翻译为:

<input class="text-box single-line" data-val="true" data-val-number="The field Nombre de place demandées must be a number." data-val-range="La demande doit être comprise entre 0 et 50 places" data-val-range-max="50" data-val-range-min="0" data-val-required="Le champ Nombre de place demandées est requis." id="RequestedQuota" name="RequestedQuota" type="number" value="">

问题在于我无法显示Prompt数据注释(通常由placeholder翻译)。此外,DataType枚举没有任何“数字”或“整数”值,可以允许我像为EmailAddress DataType一样使用EditorTemplate。

为什么电子邮件地址是Nullable<int>类型? - Pat Burke
我可能用错误的方式解释了。电子邮件部分是有效的示例。第二部分(带有int?)则不是。电子邮件的类型是字符串,如下所示:[Required, MaxLength(100), DataType(DataType.EmailAddress), Display(Name = "Adresse e-mail", Prompt = "Votre adresse e-mail"), Email(ErrorMessage = "Adresse e-mail invalide")] public string EmailAddress { get; set; } - Florent Henry
3
所以目标是获取正确的编辑器模板用于使用?如果是这样,您可以使用[UIHint]属性来指定要在Razor中使用哪个模板:http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.uihintattribute.uihint.aspx - Pat Burke
你有没有查看过 https://dev59.com/OFzUa4cB1Zd3GeqP0zV2 ? - Jack
1个回答

15

根据Pat Burke的评论,我可以使用UIHint数据属性结合良好的编辑器模板。

这里是一个示例(编辑器模板):

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line", placeholder = ViewData.ModelMetadata.Watermark, type = "number" })

(视图模型ViewModel)

public class MiageQuotaRequestViewModel
{
    [Required]
    [UIHint("Number")]
    [DataType(DataType.EmailAddress)]
    [Display(Name = "Nombre de place demandées", Prompt = "Nombre de place")]
    [Range(0, 50, ErrorMessage = "La demande doit être comprise entre 0 et 50 places")]
    public int? RequestedQuota { get; set; }
}

最后的结果如下:

在此输入图片描述

<input class="text-box single-line" 
    data-val="true"
    data-val-number="The field Nombre de place demandées must be a number."
    data-val-range="La demande doit être comprise entre 0 et 50 places"
    data-val-range-max="50"
    data-val-range-min="0"
    data-val-required="Le champ Nombre de place demandées est requis."
    id="RequestedQuota"
    name="RequestedQuota"
    placeholder="Nombre de place"
    type="number"
    value="">

2
如果那是你的编辑器模板,那么你的模型属性就毫无作用。 - Serj Sagan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接