15

我想以及客户端验证作为服务器端验证。我意识到这一点,如下所示:Asp.Net MVC EnableClientValidation不起作用

型号:(该模型有一个DataModel中(DBML),其中包含测试类)​​

namespace MyProject.TestProject 
{ 
    [MetadataType(typeof(TestMetaData))] 
    public partial class Test 
    { 

    } 

    public class TestMetaData 
    { 
     [Required(ErrorMessage="Please enter a name.")] 
     [StringLength(50)] 
     public string Name { get; set; } 
    } 
} 

控制器是没什么特别的。

的观点:

<% Html.EnableClientValidation(); %> 
<% using (Ajax.BeginForm("Index", "Test", FormMethod.Post, 
      new AjaxOptions {}, new { enctype = "multipart/form-data" })) 
    {%> 
    <%= Html.AntiForgeryToken()%> 
    <fieldset> 
     <legend>Widget Omschrijving</legend> 
     <div> 
      <%= Html.LabelFor(Model => Model.Name) %> 
      <%= Html.TextBoxFor(Model => Model.Name) %> 
      <%= Html.ValidationMessageFor(Model => Model.Name) %> 
     </div> 
    </fieldset> 
    <div> 
     <input type="submit" value="Save" /> 
    </div> 
<% } %> 

为了这个,我加入到js文件还引用了所有工作:

<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script> 
<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 

最终还是工作,但它不工作100%: 它确实按下按钮后将进行无页面刷新的验证。 它也做“一半”客户端验证。只有当您在文本框中键入一些文本,然后退格键入的文本。出现客户端验证。但是,当我通过在控件之间点击进行尝试时,没有客户端验证。

我想念一些参考资料吗? (我使用Asp.Net MVC 2 RTM)

回答

5

更改加载的JavaScript ...的顺序

<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script> 
<script src="../../Scripts/MicrosoftMvcValidation.js" type="text/javascript"></script> 

有完全相同的问题,这清除了对我来说......

+0

[这里](http://pastebin.com/685bHTHH)是如何验证包含在我的页面。但是,客户端验证完全不起作用,您是否看到任何问题? – Shimmy 2013-07-11 05:27:03

1

我以为我错过了一些东西,但我知道jQuery验证插件不会对mouseEnter/mouseLeave做出反应。据在该插件的文件(在plug in page - 寻找标有“有几件事情看演示的玩弄时”一节):

场之前被标记为无效,验证懒惰:在第一次提交表单之前,用户可以在没有感到烦人的消息的情况下通过字段进行标记 - 在他有机会实际输入正确值之前他不会被窃听

我认为这是与MVC 2客户端验证相同的规则。我不能确定,因为文档没有说什么,但“它在我的机器上运行”:)。

我使用jQuery验证路线,MVC Futures(注意,该文档不存在)支持。要使用它,你只需要更换的脚本标签MicrosoftAjax.js,MicrosoftMvcAjax.js和MicrosoftMvcValidation.js文件与这两个标签:

<script src="/js/jquery.validate.js" type="text/javascript"></script> 
<script src="/js/MicrosoftMvcJQueryValidation.js" type="text/javascript"></script> 

与你更换路径。

我还发现需要从开发者页面升级到最新版本的jquery.validate.js,因为我们在这里使用了更高版本的jQuery(1.4)。

希望有所帮助。

+0

我用你所描述的修改了我的代码,但没有改进。 我使用: jQuery 1.4.2 jQuery验证1.7 MicrosoftMvcJQueryValidation no versionNumber availabe。 我还将MicrosoftMvcJQueryValidation .js文件中的引用更改为/// ,但仍然没有任何改进。 – Colin 2010-03-24 14:54:17

1

陛下...,它的晚来回答,但试试这个:

<script src="<%= Url.Content("ScriptFile.js") %>" type="text/javascript"></script> 
相关问题