如何创建自定义“类型”属性用于Asp.net MVC中的textboxfor

本文关键字:Asp 用于 属性 net MVC textboxfor 中的 类型 何创建 创建 自定义 | 更新日期: 2023-09-27 18:11:02

我在MVC工作。我曾经陷入一种困境。如我们所知,

    @Html.Textboxfor

有一个名为type的属性,用于检测文本框可以接受的输入类型。

对于示例:type = "email"以email作为输入,如果验证失败,则显示错误消息,如"Please Enter valid email Address"

type = "number"只接受数字作为输入,如果文本需要使用则显示验证消息。

我想我的文本框将采取手机/电话号码(与国家代码和没有国家代码以及。例如+ 9177777777777)。

所以我可以创建我自己的自定义"type"属性,可以完成上述任务,并可以生成我自己的验证消息,如果验证失败?

如何创建自定义“类型”属性用于Asp.net MVC中的textboxfor

您正在谈论的属性type<input /> html元素的属性。根据HTML5规范,这个属性只能有几个有效值。点击这里查看:http://www.w3schools.com/html/html5_form_input_types.asp

所以,你不能添加任何类型的"自定义"值,这意味着浏览器会自动验证。我认为,您需要的是能够根据特定的电话号码格式验证输入。为此,您需要在模型类的属性上使用[RegularExpression]属性(完全不同的东西,但命名相同)。这一点,加上不显眼的客户端验证,将为您提供您想要的行为。

更新

type属性的不同值使您能够调用浏览器的本地客户端验证支持。对于自定义格式,使用通用type="text"并将正则表达式放在pattern属性中。浏览器将显示一个错误弹出窗口,其中包含来自title属性的消息。

在你的视图中你可以这样写:

@Html.TextBoxFor(m => m.PhoneNumber, new { pattern = "'d{3}-'d{3}-'d{4}" })

假设属性名称为PhoneNumber。您的正则表达式将根据您想要支持的实际格式而有所不同。


我认为值得一提的是另一对与验证相关的属性:

  • required
  • maxlength

关于本地客户端验证的更多信息在这里:http://www.html5rocks.com/en/tutorials/forms/constraintvalidation/

也许我错过了什么,但你可以简单地说以下(取代???因此):

@Html.TextBoxFor(m => m.???, new { type = "???" })

这是可能的,你会在这里找到你喜欢的解决方案:http://www.asp.net/mvc/tutorials/older-versions/views/creating-custom-html-helpers-cs

编辑:我一直在想你的问题,我想我错了。你可以添加你所谓的"Custom Type"使用Mvc"Template"。

例如:在视图的" Shared "文件夹中创建一个" DisplayTemplates "目录

在这个新的,创建一个PartialView类型与您的自定义模型。把你想要的所有东西放到你的新局部视图/模型中去做你想做的事情。

After进入您的主视图页面。只需调用@Html.DisplayFor(model=>model.YourNewCustomModel)和MVC做剩下的。当然,您的新CustomModel必须是主调用页面模型的一部分。