3

我在 MVC 中工作。我陷入了困境。据我们所知,

    @Html.Textboxfor

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

例如:type = "email"将电子邮件作为输入,如果验证失败,则会显示错误消息,例如“请输入有效的电子邮件地址”。

type = "number" 仅将数字作为输入,并在使用文本时显示验证消息。

我希望我的文本框将采用手机/电话号码(带国家代码和不带国家代码。例如 +9177777777777)。

那么我可以创建自己的自定义“类型”属性来完成上述任务并在验证失败时生成我自己的验证消息吗?

4

3 回答 3

3

type您所说的属性是html<input />元素的属性。根据 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/

于 2013-04-25T18:38:19.387 回答
0

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

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

例如: 创建一个“ DisplayTemplates”目录到Shared你的视图的“ ”文件夹中。

在这个新模型中,使用您的自定义模型创建一个PartialView类型。将您想要的所有内容放入新的局部视图/模型中,以执行您所期望的操作。

进入您的主视图页面后。Juste 调用@Html.DisplayFor(model=>model.YourNewCustomModel),MVC 完成其余的工作。当然,您的新 CustomModel 必须是主调用页面模型的一部分。

于 2013-04-25T18:14:02.653 回答
0

也许我遗漏了一些东西,但您可以简单地说以下内容(相应地替换 ???):

@Html.TextBoxFor(m => m.???, new { type = "???" })
于 2013-04-25T18:19:51.533 回答