【问题标题】:Server validation doesn't work when i post via jquery当我通过 jquery 发布时,服务器验证不起作用
【发布时间】:2012-04-17 10:02:27
【问题描述】:

我有一个类问题,其属性如下:

[Required]
public string Subject { get; set; }
[Required]
public string Content { get; set; }

我尝试做一些服务器验证。我已经包含了这些脚本:

<script src="@Links.Scripts.jquery_validate_min_js" type="text/javascript"></script>
<script src="@Links.Scripts.jquery_validate_unobtrusive_min_js" type="text/javascript"></script>

这是“创建”视图:

<dt><span>Question title*</span>please be specific but brief</dt>
<dd>@Html.TextBoxFor(m => m.Subject, new { @class = "boxsizingBorder" }) @Html.ValidationMessageFor(m=>m.Subject)</dd>
<dt><span>Question details</span></dt>
<dd>@Html.TextAreaFor(m => m.Content, 7, 30, new { @class = "boxsizingBorder" })@Html.ValidationMessageFor(m => m.Content)</dd>

当我尝试发布这样的新问题时:

$('#saveChanges').click(function () {
    $('#createQuestion').submit();
});

#saveChanges 是我的 span 的 id,#createQuestion 是我的表单的 id)

如果我不填写示例主题字段,我会暂时看到一条错误消息(必填字段等),但无论如何都会发布问题。这是因为我试图使用 jQuery 或什么来发布表单吗?

在这种情况下,服务器验证应该如何工作?

【问题讨论】:

  • 表格是怎么发出来的?通过 Html.BeginForm 或通过标准
    标签?
  • 如果你执行一个简单的帖子(使用 它确实有效。我过去遇到过类似的事情,会挖掘我的代码,看看我是否找到一些东西。(是否与在表单的 submit() 函数中调用验证有关。
  • 也许这会解决你的问题stackoverflow.com/questions/5618247/…
  • 正是——当我使用“标准”方式时,它的工作方式。
  • 只需添加一个表单提交函数,发出 validate() 调用并相应地返回 true 或 false。 $('#form').submit(function() { ..... });

标签: c# jquery asp.net-mvc asp.net-mvc-3 razor


【解决方案1】:

您需要在提交之前实际调用 Jquery validate 以执行验证。比如:

$('#saveChanges').click(function (event) {
   $("#yourForm").validate();
   if ($("#yourForm").valid()) {
       $('#createQuestion').submit();
   }

   event.preventDefault; //this is needed if your saveChanges button is a submit button
});

【讨论】:

  • preventDefault 优于 return false;
  • 这是一个较老的问题,但我建议使用 .trigger('submit') 而不是 .submit。使用 trigger 方法应该调用验证,调用 .submit 将简单地提交表单。
  • @mattytommo 虽然文档说 .submit 是 .trigger('submit') 的短代码,但我经常发现使用触发器会导致验证触发。也许这只是我测试中的一个孤立事件,但这里有一个讨论它的线程:stackoverflow.com/questions/645555/…
  • @NickBork 嗯,很奇怪!我猜有什么要提防的。谢谢:)
猜你喜欢
  • 2015-02-17
  • 2019-01-09
  • 2015-07-07
  • 1970-01-01
  • 2011-03-29
  • 2018-12-15
  • 1970-01-01
  • 2021-04-10
  • 1970-01-01
相关资源
最近更新 更多