【问题标题】:How can I programmatically trigger client side validation set up by a Razor view?如何以编程方式触发 Razor 视图设置的客户端验证?
【发布时间】:2012-10-05 19:17:54
【问题描述】:

我有一个小的 Ajax 应用程序,我在其中使用 Razor 视图来最初生成 HTML 表单片段,然后我使用 knockout.js 读取和写入这些片段。虽然我没有执行非 Ajax 操作请求,但我使用 Razor 生成 HTML,因此我喜欢自动生成 jQuery Validation 属性。例如。在我的单页中,我呈现了一个这样的隐藏表单:

<section id="person-detail">
    @Html.Action("EditPartial", "Person")
</section>

EditPartial 操作返回一个部分视图,看起来很像这样:

@using (Html.BeginForm())
{
    <fieldset>
        @Html.HiddenFor(model => model.Id, new { data_bind = "value: id" })
        <div class="editor-label">
            @Html.LabelFor(model => model.FirstName)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(model => model.FirstName, new { data_bind = "value: firstName" })
            @Html.ValidationMessageFor(model => model.FirstName)
        </div>
        <p>            
            <a href="#" data-bind="click: save">Update</a>&nbsp;&nbsp;
            <a href="#" data-bind="click: delete">Delete</a>
        </p>
    </fieldset>
}

因为我从未真正发布过表单,并且由于一些未知因素,尽管我的 Person 模型上的所有属性都标有 Required 属性,我看不到客户端验证的迹象。当我的保存按钮被点击时,我必须怎么做才能触发这个验证?

【问题讨论】:

  • 你试过$("form").validate()吗?或$("form").valid()?
  • 是的,但是Object [object Object] has no method 'validate'valid() 也一样。
  • 您确定页面上同时引用了 jQuery 和不显眼的 jQuery 验证脚本吗?
  • 你能告诉我们实际发送到浏览器的HTML吗?您在 Razor 视图中显示 EditPartial。实际的 HTML 将具有您可以查找的 data-* 属性。这些是渲染的吗?
  • Object [object Object] has no method 'validate' 是页面上未引用 jquery validate 时的错误消息。在我看来,这与 Razor 或 knockout.js 无关

标签: asp.net-mvc knockout.js jquery-validate asp.net-mvc-4


【解决方案1】:

假设你的表单有一个类'main':

    $('form').submit(function() {
            var $form = $('form.main');
            $form.valid();
    });

【讨论】:

  • 注意,.valid() 将返回真/假,表明表单是否有效。另外,我不确定它是否会调用 preventDefault() 让您停止表单提交,或者您是否需要检查返回值并自己调用 preventDefault()。
猜你喜欢
  • 2011-06-23
  • 2018-05-05
  • 1970-01-01
  • 1970-01-01
  • 2012-06-15
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
相关资源
最近更新 更多