Asp.net mvc 3 jQuery对话框上的MVC 3客户端验证

Asp.net mvc 3 jQuery对话框上的MVC 3客户端验证,asp.net-mvc-3,validation,jquery-dialog,Asp.net Mvc 3,Validation,Jquery Dialog,我正在使用jquery对话框显示许多表单,我希望在其中添加客户端验证。我通读了一些示例,说mvc 3已经以某种方式支持jquery客户端验证,但我尝试包括必要的脚本,我的表单如下: @using (Html.BeginForm("CreateFood", "Home", FormMethod.Post, new { id = "formData" })) { @Html.ValidationSummary(false, "Please fix these e

我正在使用jquery对话框显示许多表单,我希望在其中添加客户端验证。我通读了一些示例,说mvc 3已经以某种方式支持jquery客户端验证,但我尝试包括必要的脚本,我的表单如下:

 @using (Html.BeginForm("CreateFood", "Home", FormMethod.Post, new { id = "formData" }))
       {
           @Html.ValidationSummary(false, "Please fix these errors.")
当我试图在没有填写必填字段的情况下提交表格时,我仍然无法收到任何消息。有人能给我更多的想法/解释/例子吗

这里真的需要帮助。。。谢谢

更新(在“我的对话”的脚本中添加)

删除后,打开对话框:

  // Once drop, open dialog to create food
    options.drop = function (event, ui) {
        // Get the ContainerImgName which food dropped at
        var cimg = $(this).attr('id');
        // Pass in ContainerImgName to retrieve respective ContainerID
        // Once success, set the container hidden field value in the FoodForm
        $.ajax({
            url: '/food/getcontainerid',
            type: 'GET',
            data: { cImg: cimg },
            success: function (result) { $('#containerID').val(result); }
        });
        clear();
        $.validator.unobtrusive.parse($createdialog);
        $createdialog.dialog('open');
    };

对于每个动态生成的表单,在使用
$.validator.unobtrusive.parse
函数将此内容注入DOM后,需要手动运行验证程序。

我遇到了相同的问题,通过以下方法解决了此问题:

 $(name).dialog({
            autoOpen: true,
            width: options.witdth,
            heigth: options.height,
            resizable: true,
            draggable: true,
            title: options.title,
            modal: true,
            open: function (event, ui) {
                // Enable validation for unobtrusive stuffs
                $(this).load(options.url, function () {
                    var $jQval = $.validator;
                    $jQval.unobtrusive.parse($(this));
                });

            }
        });

当然,您可以在对话框的关闭事件上添加验证,这取决于您正在做什么,在我的情况下,弹出窗口只是为了显示错误,所以我在加载内容时执行了验证。(此弹出窗口显示am操作结果)

您好,很抱歉,我不太明白。。那么我需要通过函数解析的dom就是表单?还是对话?谢谢…@user834754,此表单最初不在DOM中,对吗?您可能是在AJAX请求之后插入它,然后在对话框中显示它。就是在你显示你需要解析的对话框的那一刻。嗨,这不管用。。我试图在对话框打开之前解析它,但我得到了奇怪的响应,一旦我点击提交,表单将显示在页面中,但不再显示在对话框中,你知道吗??谢谢…@user834754,您是否已将jquery对话框中的表单轴化了?如果您不这样做,它将简单地执行一个正常的提交到服务器并重新加载页面。我想我知道原因,因为在我的控制器上有一个提交操作的try/catch。如果我想在对话框中使用客户端验证,我是否不需要它??谢谢…嗨,我试过了,但还是不行。。尽管我无法填写必填字段,但在我的代码中,$jQval.unobtrusive.parse($(this))将向html元素添加装饰并绑定js验证函数,对话框在我单击submit event后关闭。您是否偶然通过AJAX提交?您在JS控制台中看到错误了吗?是否添加了@Html.EnableClientValidation(true);在视野中的某个地方?你能发布onclick/onsubmit函数吗(如果你正在使用它们的话)?嗨,实际上我正在使用拖放,一旦任何项目被拖放,我就会打开对话框。我已经用drop选项更新了我的问题,可以帮我看看吗?真的非常感谢…您使用ajax提交,这就是罪魁祸首:)。我想有一种方法可以触发验证,即使劫持“使用jquery提交”,但还没有找到它。在这种情况下,我更喜欢使用Ajax.BeginForm()助手使用标准提交。只需尝试在js.hi中的submit函数中执行Form.submit(),您能向我展示一下您的submit函数吗??我不明白。。真的非常感谢。。
 $(name).dialog({
            autoOpen: true,
            width: options.witdth,
            heigth: options.height,
            resizable: true,
            draggable: true,
            title: options.title,
            modal: true,
            open: function (event, ui) {
                // Enable validation for unobtrusive stuffs
                $(this).load(options.url, function () {
                    var $jQval = $.validator;
                    $jQval.unobtrusive.parse($(this));
                });

            }
        });