【问题标题】:MVC 3 Client side validation stop working after POSTMVC 3客户端验证在POST后停止工作
【发布时间】:2012-05-18 18:20:45
【问题描述】:

我在从 MSAjax MVC 3 Razor 视图生成的表单上使用了 jQuery ajax 帖子。

在此表单中,客户端验证在输入过程中正常工作,但是当用户单击“搜索”按钮生成“POST”时,客户端验证停止运行!!

这是模型:

public class AnagraficaSearchViewModel : ViewModelBase
    {
        [Required]
        [StringLength(2)]
        public virtual string Ricerca { get; set; }
    }

这是控制器:

[HttpPost]
public ActionResult Index(AnagraficaSearchViewModel model)
{
    if (model.Ricerca == "12")
    {
        model.Status = Status.Error;
        model.Message = "Errore!";

        ModelState.AddModelError("", Cult.Testo(Cult.CultTextsIDs.StatusError));                
    }

    if (Request.IsAjaxRequest()) return PartialView("SearchCriteria", model);

    return View(model);
}

这是主视图:

<div id="search-anagrafica-criteria">
    @{ Html.RenderPartial("SearchCriteria", Model); }
</div>

这是 SearchCriteria 视图:

@model AnagraficaSearchViewModel

<script type="text/javascript">
    function CheckRow() {
        $("form").valid();
        abs.message.convertErrorsToTooltips();
    };

    function InitSearch() {
        $("#Ricerca").bind("propertychange keyup input paste", function () {
            setTimeout("CheckRow();", 100);
        });

        CheckRow();

        $("#Ricerca").focus();
    }


    $(function () {
        $('form').submit(function (e) {
            e.preventDefault();

            var $form = $(this);

            if (!$form.valid()) {
                abs.message.convertErrorsToTooltips();
                return false;
            }

            $.validator.unobtrusive.parse($('form'));  //added

            if ($(this).valid()) {
                $.ajax({
                    url: this.action,
                    type: this.method,
                    data: $(this).serialize(),
                    success: function (result) {
                        $('#search-anagrafica-criteria').html(result);
                        InitSearch();
                    },
                    complete: function (result) {
                        CheckRow();
                    }
                });
            }
            return false;
        });

        InitSearch();
    });

</script>

@using (Ajax.BeginForm("Index", "Anagrafica", null, new AjaxOptions { UpdateTargetId = "search-anagrafica-criteria", HttpMethod = "POST", OnComplete = "CheckRow()" }))
{
    @Html.LabelFor(el => el.Ricerca)
    @Html.TextBoxFor(el => el.Ricerca)
    @Html.ValidationMessageFor(el => el.Ricerca)

    <button class="btn btn-primary" type="submit" style="margin-left: 10px">Search</button>

    @Html.ValidationSummary(true)    
}

工作了好几个小时,但没有任何改变!!

感谢您的帮助!

【问题讨论】:

  • 您是否尝试删除 $.validator.unobtrusive.parse($('form'));从原始位置并将其放在所有视图代码之后...也就是说,在您关闭 AjaxForm 解析之前添加以下代码...
  • 即使你移动了它的位置,如果你不先删除数据元素,解析方法也不会重新绑定不显眼的验证。

标签: javascript asp.net-mvc-3 jquery client-side-validation


【解决方案1】:

改用以下内容:

      $('form').removeData("validator");
      $('form').removeData("unobtrusiveValidation");
      $.validator.unobtrusive.parse('form');

【讨论】:

  • 您的建议并不能解决问题。并且您的代码在输入后添加
【解决方案2】:

我使用一种比仅仅重新解析表单更“高级”的方式。 请参阅我的帖子:

ASP.Net MVC: Can you use Data Annotations / Validation with an AJAX / jQuery call?

【讨论】:

  • 这对我来说是完美的!谢谢亚当!
猜你喜欢
  • 2011-07-03
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 2012-05-25
  • 2011-11-06
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
相关资源
最近更新 更多