2

我有一个表单,这个表单有一些需要的值,所以在我的视图模型中我有一些东西,比如:

[Required(ErrorMessageResourceType = typeof(Res_Errors), ErrorMessageResourceName = "errorPacienteNoSeleccionado")]
public int? scheduledIdPersonaSeleccionada { get; set; }

以及提交按钮,但我不想将表单提交到服务器,如果我的验证通过,我只需要执行一个 jquery 函数。

验证正在工作,但我不知道如何阻止表单发布,而是调用我的函数。

4

3 回答 3

1

如果您只想在表单提交上执行 javascript(而不是实际发送信息),请查看@Ajax.BeginForm

@using (Ajax.BeginForm(new AjaxOptions { OnBegin = "MyFunction" }))
{
    @Html.EditorFor(x => x.scheduledIdPersonaSeleccionado)
    <input type="submit" value="Presentar" />
}

或者,您可以连接到提交事件并自己做:

$('form').submit(function(){
  if ($(this).valid()) { // validation passed
    // cal your jquery function here
  }
});
于 2013-10-08T19:07:53.803 回答
1

将提交按钮更改为按钮类型。验证将调用,但提交不会

<form>
    @Html.EditorFor(x => x.scheduledIdPersonaSeleccionado)
    @Html.ValidationMessageFor(x=>x.scheduledIdPersonaSeleccionado)
    <input type="button" value="Presentar" onclick="DoSomething();" />
</form>
于 2015-06-21T07:29:00.697 回答
0

我通过破解jQuery Validate default options解决了这个问题。jQuery Validate 通过不显眼的验证在后台使用。

如果您在页面上只有一个表单要验证,您可以全局定义一个提交处理程序,该处理程序仅在提交有效表单时执行:

$.validator.setDefaults({
    submitHandler: function (form, e) {
        // your code
    }
});

它必须在不显眼的初始化之前定义,该初始化发生在ready. 否则您将不得不重新解析表单$.validator.unobtrusive.parse(selectorOfYourForm)

就我而言,有许多不同需求的表格,我使用了这样的东西:

let submitHandlers = [];

$.validator.setDefaults({
    submitHandler: function (form, e) {
        let result = true;
        $.each(submitHandlers, function (i, submitHandler) {
            result = submitHandler(form, e) && result;
        });
        return result;
    }
});

function addUnobstrusiveValidationSubmitHandler(submitHandler) {
    if (typeof submitHandler !== 'function') {
        throw 'submitHandler must be a function';
    }
    submitHandlers.push(submitHandler);
}

我让每个submitHandler人只负责处理它必须处理的表格。提交处理程序应该检查表单,return true;如果它不是它应该处理的表单,则不做任何其他事情。因此,在意外表单上添加不良submitHandler行为会弄乱其他表单或整个页面。

如果我们可以submitHandlerparse调用中定义 会更好,但目前这个调用不接受options对象。

(还有一些选项可以通过将对象分配给 来全局定义,但除了和选项$validator.unobtrusive.options之外,我没有找到太多关于此的文档,而且它似乎没有指定 a 的选项。据我所知,源,我们只能定义以下附加选项,匹配jQuery验证选项:和.)errorClasserrorElementsubmitHandlererrorPlacementinvalidHandlersuccess

于 2021-08-19T16:36:38.923 回答