当前位置: 首页 > 面试题库 >

无法在jQuery Ajax Post上使用MVC 3进行无干扰的验证

屈翰飞
2023-03-14
问题内容

我很难在MVC3上进行验证。当我直接加载页面时,它工作正常,但是当我使用jquery AJAX POST时,它无法验证:

使用加载此表单$('#modal-dialog').load('/DartsMVC/Restaurant/Edit/13'),这是呈现的HTML:

<form action="/DartsMVC/Restaurant/Edit/13" method="post">
    <fieldset>
        <legend>Restaurant</legend>

        <input data-val="true" data-val-number="The field RestaurantID must be a number." data-val-required="The RestaurantID field is required." id="RestaurantID" name="RestaurantID" type="hidden" value="13">

        <div class="editor-label">
            <label for="Name">Name</label>
        </div>
        <div class="editor-field">
            <input class="text-box single-line" data-val="true" data-val-required="The Name field is required." id="Name" name="Name" type="text" value="furaibo">
            <span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span>
        </div>

        <p>
            <input type="submit" value="Save" class="ui-button ui-widget ui-state-default ui-corner-all" role="button" aria-disabled="false">
        </p>
    </fieldset>
</form>

通过拦截表单/提交来使用AJAX POST。帖子完成后,将弹出并关闭模式对话框。我想在发送帖子之前验证表格:

// force change the submit data to an ajax POST (usually 'save', 'delete' button)
$('#modal-dialog').delegate('form', 'submit', function (e) {
    e.preventDefault();
    var form = $(this);
    form.validate(); // does nothing
    if (form.valid()) {
        $.ajax({
            url: form.attr('action'),
            type: "POST",
            data: form.serialize(),
            success: function (data) {
                $('#modal-dialog').dialog('close');
            },
            error: function (jqXhr, textStatus, errorThrown) {
                alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')");
            }
        });
    }
});

我这样做是否破坏了某些东西? .valid()始终返回true。

我的web.config具有:

  <appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>

我的页面来源有:

<link href="/DartsMVC/Content/themes/cupertino/jquery-ui-1.8.14.custom.css" rel="stylesheet" type="text/css">

<script src="/DartsMVC/Scripts/modernizr-1.7.min.js" type="text/javascript"></script>
<script src="/DartsMVC/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
<script src="/DartsMVC/Scripts/jquery-ui-1.8.14.custom.min.js" type="text/javascript"></script>

<script src="/DartsMVC/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>
<script src="/DartsMVC/Scripts/jquery.validate.js" type="text/javascript"></script>
<script src="/DartsMVC/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>

我的模型有:

    [Required]
    public string Name { get; set; }

经过更多研究,我认为它可能与动态控件有关:

  • 由于存在data-val属性,因此这不是Form作用域问题
  • 我将尝试调用$ .validator.unobtrusive.parse(’#formid’)。如果那不起作用,我将使用此最后的手段:
  • http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content/

问题答案:

解决了

调用$ .validator.unobtrusive.parse($(’form’))可以达到目的。我想需要为动态内容重新创建验证器



 类似资料:
  • 概述 无干扰模式将只在显示器中以全屏模式显示你的文件,可以在菜单栏中的View - 切换无干扰模式进入无干扰模式,快捷键也可以。 定制化 无干扰模式将使某些设置生效,默认设置(位于Packages/Default/Distraction Free.sublime-settings)是: { "line_numbers": false, "gutter": false, "draw_ce

  • 就像标题所暗示的那样,当我在 PyCharm 或 Intellij 中使用无干扰模式时,即使我在设置中勾选了“行号”框,我也看不到行号。有没有办法让行号出现在无干扰模式下? 如果有帮助的话,我正在使用Linux(Ubuntu)(我看到了一张Mac图片,其中线条以无干扰模式显示),我的PyCharm版本是2016.2.3。

  • 当我登录到Bluemix上的IBM容器时,我得到以下错误: cf ic登录 **从IBM容器中检索客户端证书 **将客户端证书存储在/users/triplez/.ice/certs中成功检索客户端证书 **检查本地docker配置OK **在registry.ng.bluemix.net处使用注册表进行身份验证 无法在registry.ng.bluemix.net处使用IBM容器注册表进行身份验

  • 问题内容: 我正在尝试通过Bootstrap激活验证,并且已粘贴到页面上的follownig示例中。 我可以看到输入控件的外观发生了变化(现在有点圆了,现在更加美观了), 但是 它仍然没有显示绿色边框,就像在链接到的页面上可以看到的那样。我要链接到的Bootstrap指出如下。 尝试用googlearch问题,我只获得示例链接到从中获得示例的官方站点,因此在此方面几乎没有什么帮助。我在摆弄这个问题

  • 我试图通过Laravel发送电子邮件。但它正在出错 错误获取: 使用3个可能的身份验证器在用户名为“myEmailID@gmail.com”的SMTP服务器上进行身份验证失败。身份验证器登录返回Swift_TransportException:预期响应代码235,但得到代码“535”,消息“535-5.7.8用户名和密码不被接受”。在535 5.7.8https://support.google.

  • 问题内容: 我正在尝试使用swift来对本地播放器进行身份验证,但是每次我为.authenticated属性获取错误值时,都无法使用。这是我正在使用的代码,应用启动时,主视图控制器会调用它。 它可以很好地显示登录视图,但是当我输入测试帐户登录名时,它只是将as 返回为false。iTunes Connect中的捆绑包标识符和info.plist完全相同,版本和应用程序名称也相同。iTunes Co