jquery - 在 Javascript 中访问 ModelState

标签 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>
        }

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

最佳答案

我会根据我对你问题的理解来尝试解决这个问题。所以你有:

    $(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 发布。如果在服务器端存在客户端验证 Uncaught Error ,那么您只需再次返回 View 即可,而无需对 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. 显示您的加载程序$("#loading").fadeIn();
  3. 进行客户端验证validFormInputs()
  4. 如果验证失败,则隐藏您的加载程序$("#loading").fadeOut();

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

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

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

关于jquery - 在 Javascript 中访问 ModelState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15673743/

相关文章:

jquery - 使用 jquery 模式对话框和 MVC.net 时,TinyMCE 附加然后消失

javascript - 如何让我的底部导航栏粘在我的顶部导航栏上?

javascript - 使动画插件工作的问题

asp.net-mvc - 编译后的 MVC View 在首次请求时渲染速度仍然缓慢

asp.net-mvc-3 - 可重用的编辑器模板,带有用于业务对象的 DropDownList

ajax - ASP.NET MVC 3 Ajax.BeginForm 和 Html.TextBoxFor 不反射(reflect)在服务器上完成的更改

javascript - 创建 CKEditor 插件时,如何将 "colorpicker"添加到我的对话框中?

c# - MVC 5 中的数据绑定(bind)和使用 Razor 引擎的 Select2 Multiple Values

c# - 对于动态加载的 Razor 类库,ASP.NET Core 运行时编译失败并显示 "Cannot find compilation library location for package"

jquery - 如何使用 ViewModel 数组字符串属性绑定(bind)多个文本框?