如果没有jQuery将字段validation为URL,如何在MVC4中使用type =“url”?
情况就是这样:我在这里有一个很棒的大文本输入框: https : //asafaweb.com
这不需要遵守URL的严格定义; 我允许没有方案的地址然后默认为HTTP用于可用性目的。 例如,“stackoverflow.com”将被视为有效的URL。 但是也有一些我不希望出于各种原因允许的URL(即它们已被列入黑名单或者它们是内部IP地址范围)。
我想将输入的类型设置为“url”而不是默认的“text”,以便移动设备上的用户获得为URL上下文设计的键盘(即iOS为您提供“.com”按钮),问题是一旦我这样做,与ASP.NET MVC捆绑在一起的默认不显眼的jQueryvalidation需要一个带有方案的URL,从而打破了我的无方案URL支持。
这是一个MVC4站点,我有一个HTML帮助器,如下所示:
@Html.TextBoxFor(m => m.ScanUrl, new { type = "url" })
然后,ScanUrl属性具有自定义ValidationAttribute,它执行所有定制检查以确保可以扫描URL。
如何在没有jQueryvalidation插入的情况下保留现有的validation模式,并且想要确保URL是一个严格的 URL?
如果您不需要在此站点中的任何位置进行严格的URLvalidation,则修改jQuery ValidationvalidationURL的方式可能是处理该问题的最简单方法。 如果您使用的是MVC 4附带的版本,您将在jquery.validate.js的第1034行找到它。
你可以在插件脚本中调整正则表达式,或者你可以在加载jQueryvalidation后修补urlvalidation方法:
之后修补它的主要优点是你不依赖于你的调整版本的脚本,并且可以在以后更新jQuery Validation本身,而不会丢失你的自定义urlvalidation器。 这对您来说可能是显而易见的,但可能对其他人稍后找到这个答案有所帮助。
如果焦点输出/更改不存在,您可以使用javascript自动将模式添加到输入中的URL。
您还可以告诉jQuery Validation插件根据您指定的选择器选择性地忽略输入字段,这可能是您要添加到要忽略的所有元素的class="ignorejQueryValidate"
,例如class="ignorejQueryValidate"
,或者在您的情况下,所有输入都是type="url"
。
请参阅Validation插件的validate()
方法中jQuery文档中的ignore
选项部分。
@using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post, new { id = "myForm"})) { @Html.TextBoxFor(m => m.ScanUrl, new { type = "url", @class = "ignorejQueryValidate" }) } $("#myForm").validate({ ignore: ".ignorejQueryValidate" });
要么
@using (Html.BeginForm("SomeAction", "SomeController", FormMethod.Post, new { id = "myForm" })) { @Html.TextBoxFor(m => m.ScanUrl, new { type = "url" }) } $("#myForm").validate({ ignore: "input[type=url]" });
- Krajee文件输入小部件’upload’方法抛出exception
- ViewData.ModelState.IsValid为false,因为Mvc无法解析用逗号分隔数百和数千的值
- 使用jQuery的$ .ajax()将多个Json对象作为数据传递
- 对于使用Microsoft工具(asp.net mvc或silverlight)的数据输入密集型Intranet应用程序,您会建议使用哪种技术堆栈?
- JQuery 3和SignalR 2.2.0
- 为什么Asp.Net MVC 5将@ Scripts.Render(“〜/ bundles / jquery”)放在_Layout.cshtml的底部?
- jQuery通用代码
- mvc4 ajax更新同一页面
- JS从文本框中抓取文本,传递给asp.net mvc ActionResult,但ActionResult参数显示为null