【问题标题】:Conflict between Jquery Validate and Asp.net MVCJquery Validate 和 Asp.net MVC 之间的冲突
【发布时间】:2010-05-28 20:43:40
【问题描述】:

我正在使用 asp.net mvc 2.0 和 jquery validate 1.7 (http://bassistance.de/jquery-plugins/jquery-plugin-validation/)

发生的事情是这样的。用户可以单击链接来编辑产品。当用户点击他们想要编辑的产品时,会出现一个带有文本框和下拉列表形式的 jquery 对话框。

这些 html 控件填充了信息。假设用户选择编辑 Ipad 产品,将出现一个对话框,其中一个表单文本框将包含“Ipad”。

现在此表单在服务器端呈现(表单处于局部视图中)。加载对话框时,会发出 ajax 请求以获取该部分视图,并且在 ajax 调用的响应部分中,我会执行类似的操作

$('#EditDialog).html(ajaxresponse).dialog({...});

所以我会在我的对话框中呈现类似的内容

<form id="EditProduct">
Product Name: <input type="text"  value="IPad" name="ProductName" />
</form> 

现在我的 jquery 验证将是这样的。

 $("#EditProduct").validate(
           {
               errorContainer: "#Errorbox",
               errorLabelContainer: "#Errorbox ul",
               wrapper: "li",
               rules:
               {
                   ProductName: "required"
               }
           });

所以我知道这是可行的,因为我使用相同的验证来添加产品,如果您尝试将 ProductName 留空,它将显示验证错误。

虽然现在它不适用于编辑,但我想我知道原因但不知道如何修复它。

文本框的值为“iPad”,这就是Html.TextBoxFor() 的呈现方式。但是,如果用户将产品名称更改为“Iphone”或空白,则该值永远不会改变。它在 html 中总是“Ipad”。

所以我认为,当验证通过时,它看起来就在其中,哦,其中已经有一个值。它是有效的,即使它实际上可能是空白的。

当我通过 ajax 发布到服务器时,它会获得正确的值,并且服务器端验证会停止它,但是由于这个问题,我的整个客户端验证都变得无用,因为它永远不会更改 html。

【问题讨论】:

    标签: jquery asp.net-mvc jquery-validate


    【解决方案1】:

    这似乎不太对劲!

    想象一下,在“添加”的情况下,你渲染的 HTML 看起来像这样:

    <form id="AddProduct">
    Product Name: <input type="text"  value="" name="ProductName" />
    </form>
    

    所以“HTML”有一个空白值,但验证插件可以在 ProductName 被填写后正确判断?

    我不确定问题出在哪里,但如果您有调试器(即 Firebug),请尝试在“检查”功能(~1.6 中的第 475 行)中的验证插件中放置一个中断。您应该可以观看 element.value 以查看它是否找出了正确的用户编辑值。

    【讨论】:

    • 好吧,在做一个例子向你展示我发现我错过了调用提交的行(因为我使用的是 jquery ui 对话框,它只有按钮,所以我必须调用按钮点击表单手动提交)。
    猜你喜欢
    • 2011-05-22
    • 1970-01-01
    • 2012-03-06
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 2017-11-01
    相关资源
    最近更新 更多