我在MVC工作。我陷入困境。 我们知道,
@Html.Textboxfor
有一个名为 type 的属性,可以检测文本框可以输入的输入类型。
对于Ex: type =“email”将电子邮件作为输入,如果验证失败,则会显示错误消息,例如“请输入有效的电子邮件地址”。
type =“number”仅将数字作为输入,并在文字将使用时显示验证消息。
我希望我的文本框会显示移动电话号码(包含国家/地区代码,也没有国家/地区代码。例如+9177777777777)。
那么我可以创建自己的自定义“type”属性来完成上述任务,并且如果验证失败可以生成我自己的验证消息吗?
答案 0 :(得分:3)
您正在谈论的属性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/
答案 1 :(得分:0)
是的,有可能,你会在这里找到你喜欢的解决方案: http://www.asp.net/mvc/tutorials/older-versions/views/creating-custom-html-helpers-cs
编辑:
我在想你的问题,我想我错了。
您可以使用Mvc“Custom Type
”添加所谓的“Template
”。
例如:
在视图的“DisplayTemplates
”文件夹中创建“Shared
”目录。
在这个新模式中,使用您的自定义模型创建一个PartialView
。
把你想要的东西放到你的新局部视图/模型中去做你想要的事情。
进入主视图页面后。 Juste调用@Html.DisplayFor(model=>model.YourNewCustomModel)
,MVC完成其余的工作。
当然,您的新CustomModel必须是主调用页面模型的一部分。
答案 2 :(得分:0)
也许我错过了什么,但你可以简单地说出以下内容(相应地更换???):
@Html.TextBoxFor(m => m.???, new { type = "???" })