15

我想要客户端验证作为服务器端验证。我意识到这一点如下:

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

4

3 回答 3

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>

有完全相同的问题,这为我清除了它......

于 2010-07-16T17:56:33.570 回答
1

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

<script src="<%= Url.Content("ScriptFile.js") %>" type="text/javascript"></script>
于 2010-06-20T16:51:21.380 回答
1

我以为我也遗漏了一些东西,但我知道 jQuery 验证插件不会对 mouseEnter/mouseLeave 做出反应。根据该插件的文档(在插件页面- 查找标有“玩演示时需要注意的一些事项”的部分):

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

我认为这与 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)。

希望有帮助。

于 2010-03-23T18:55:25.777 回答