Asp.net mvc DataType.PhoneNumber属性对显示没有影响
我在视图模型的Asp.net mvc DataType.PhoneNumber属性对显示没有影响,asp.net-mvc,html,asp.net-mvc-viewmodel,Asp.net Mvc,Html,Asp.net Mvc Viewmodel,我在视图模型的字符串上有一个[DataType(DataType.PhoneNumber)]。但是,当显示电话号码时,它会呈现为一个简单的字符串,没有格式 我的视图模型中的另一个字段具有[DataType(DataType.Url)]属性,它正确地呈现为HTML元素 那么,我有两个问题: 为什么DataType.Url修饰字段在 DataType.PhoneNumber字段看起来像一个普通的字符串,没有电话特定的格式 如何将PhoneNumber呈现为有效的电话号码 (例如,类似于(xxx)xx
字符串上有一个[DataType(DataType.PhoneNumber)]
。但是,当显示电话号码时,它会呈现为一个简单的字符串,没有格式
我的视图模型中的另一个字段具有[DataType(DataType.Url)]
属性,它正确地呈现为HTML元素
那么,我有两个问题:
为什么DataType.Url
修饰字段在
DataType.PhoneNumber
字段看起来像一个普通的字符串,没有电话特定的格式
如何将PhoneNumber
呈现为有效的电话号码
(例如,类似于(xxx)xxx xxxx
。如果您告诉我必须使用
DataFormat
属性和DataFormatString
,那么
甚至有一个数据类型.PhoneNumber
对于第一个问题,Url有一个特定的语法,如果不遵循该语法,就不会是正确的Url
电话号码没有任何特定的格式。仅在美国你就可以有
xxx xxx xxxx
(xxx)xxx xxxx
(xxx)xxx xxxx
xxx.xxx.xxxx
1(xxx)xxx xxxx
然后输入带有国家代码前缀的国际号码
010 64 3 477 4000
00116434774000
+6434774000
所有这些都是有效的电话号码
input=“tel”
允许您嵌入电话号码,以便在移动(电话)浏览器中,您可以单击它,它将在拨号程序中预先填充电话号码
至于数据注释,它们呈现正确的html,它们将具有正确的html5类型标记。这取决于浏览器在屏幕上实际实现它的外观或解释它应该如何验证。>甚至拥有DataType.PhoneNumber有什么意义?告诉移动浏览器这是一个可拨打的号码。您的第一个关于电话号码格式变化的观点显然是正确的,并且可以解释为什么没有电话号码的默认呈现。您关于input=“tel”的观点与移动设备无关。所有浏览器,不仅仅是移动浏览器,都可以使用input=“tel”。我在桌面上安装了Skype,并单击input=“tel”打开Skype。您可能没有查看为DataType.PhoneNumber生成的HTML。重点是没有特殊的HTML或格式。它呈现为普通的旧字符串。我要说的是DataType.PhoneNumber的唯一用途是输出“type='tel”进入html。就是这样。这取决于浏览器skype…如何解释。html中不会生成type=“tel”。因此,浏览器无法知道这是一个电话号码。此外,您也不正确,因为DataType.PhoneNumber的唯一用法是呈现input=“tel”(无论如何它都不会这样做)。通过使用DataType.PhoneNumber,我可以在名为PhoneNumber.cshtml的文件中设置自定义显示模板,该模板将由调用,用于所有用[DataType(DataType.PhoneNumber)]修饰的字段。EditorFor()当您用DateType.PhoneNumber装饰模型属性时生成。我的问题不是关于编辑器模板。而是关于显示模板。在我的MVC 5应用程序中,@Html.DisplayNameFor(model=>model.PhoneNumber)生成312551212,零Html将其包装,就像一个普通的旧字符串一样。