Asp.Net MVC EnableClientValidation不起作用

时间:2010-03-23 13:50:09

标签: validation asp.net-mvc-2 data-annotations client-side-validation

我希望客户端验证与服务器端验证一样好。我意识到这一点如下:

模型:(模型有一个包含Test类的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)

3 个答案:

答案 0 :(得分: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>

有完全相同的问题,这为我解决了......

答案 1 :(得分:1)

我以为我也遗漏了一些东西,但我知道jQuery验证插件对mouseEnter / mouseLeave没有反应。根据该插件的文档(在plug in page - 寻找标有“玩演示时要寻找的一些东西”的部分):

  

在字段被标记为无效之前,验证是懒惰的:在第一次提交表单之前,用户可以通过字段标记而不会收到恼人的消息 - 在他有机会实际进入之前,他不会被窃听正确的值

我认为它与MVC 2客户端验证的规则相同。我无法确定这一点,因为文档没有说什么,只是“它在我的机器上工作”:)。

我选择了MVC Futures支持的jQuery验证路由(请注意,该文档不存在)。要使用它,您只需要用这两个标记替换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)。

希望有所帮助。

答案 2 :(得分:1)

嗯...,现在回答很晚但是试试这个:

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