在Javascript中访问ModelState

时间:2013-03-28 03:26:26

标签: jquery asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 modelstate

我正在尝试在我的asp.net mvc 4应用程序上放置一个jQuery动画加载器,当用户点击提交按钮时,它将超过整个屏幕,白色清洗,请稍等。这一切都有效。我遇到问题的部分是,当我的表单上存在验证错误时,客户端验证会启动(我想要保留)并且它被困在jquery加载器屏幕后面。我这样称呼装载机:

        $(function () {
            $("#submitbtn").click(function () {
                $("#loading").fadeIn();
            });
        });

在我的$(document).ready(....函数中。我的第一个想法是使用

        @if (ViewData.ModelState.IsValid)
        {
            <text>$(function () {
                $("#submitbtn").click(function () {
                    $("#loading").fadeIn();
                });
            });</text>
        }

但是当页面加载时这是有效的,它会写出来(我的坏我应该知道)。现在我不知所措,我不知道该怎么做。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

根据我对你的问题的理解,我会对它进行一次拍摄。所以你有:

    $(function () {
        $("#submitbtn").click(function () {
            $("#loading").fadeIn();
            if (validFormInputs()) {                   
                yourForm.submit();
            }
            else {
                // hide the laoder again
                $("#loading").fadeOut(); // or .hide or however you want to hide it
            }
        });
    });

现在,如果提交动作发生得太快,加载器可能根本不显示,因为提交是回发而不是ajax帖子。如果在服务器端有一个错误没有被客户端验证捕获,那么你可以再次返回视图,而不必在你的javascript上做一些特别的事情。所以你的方法可能如下所示:

[HttpPost]
public ActionResult Edit(YourModel input) {
    if (!ModelState.IsValid) {
        return View(input);
    }

    // do something here, redirect or return the view again
}

请再次注意,此代码用于回发操作,用于ajax帖子。

<强>更新 所以基本上就是这一步:

  1. 捕获提交按钮$("#submitbtn").click(function ()...
  2. 的点击事件
  3. 显示您的装载机$("#loading").fadeIn();
  4. 进行客户端验证validFormInputs()
  5. 如果验证失败,则隐藏您的装载机$("#loading").fadeOut();

    4A。假设您使用的是验证插件,或者在任何情况下,您都应该显示错误消息

  6. 如果验证成功,则提交表单yourForm.submit();

  7. 如果服务器端验证失败,则返回视图return View(input);