【问题标题】:ASP.NET MVC JQuery Validation Not Triggering through Submit Input .clickASP.NET MVC JQuery 验证未通过提交输入触发。单击
【发布时间】:2018-08-31 05:20:21
【问题描述】:

我在验证登录时遇到问题。我的JQuery 没有触发,这就是为什么Json 数据没有通过。我希望它在进入控制器之前先触发JQuery。它进入控制器,但问题是未触发 .submit() 函数,这就是未传递 ajax 数据的原因。谢谢。

LogIn.cshtml

@model DTS.Models.User
<h2>LogIn</h2>

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <hr />
        @Html.ValidationSummary(true)
        @Html.HiddenFor(model => model.UserID)

        <div class="form-group">
            @Html.LabelFor(model => model.Username, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Username, new {@id = "Username" })
                @Html.ValidationMessageFor(model => model.Username)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Password, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Password, new { @id = "Password" })
                @Html.ValidationMessageFor(model => model.Password)
            </div>
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Log In" class="btn btn-default" id="Login"/>
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

<script>
    $("#Login").submit(function () {
        var dataObject = { UsernName: $("#Username").val(), Password: $("#Password").val() };

        $.ajax({
            url: Url.Action("LogIn", "User"),
            type: "POST",
            data: dataObject,
            datatype: "json",
            success: function(result)
            {
                if (result.toString()=="Success!") {
                    alert(result);
                }
                else
                {
                    alert(result);
                }
            },
            error: function(result)
            {
                alert("Error");
            }
        });

    })

</script>

UserController.cs

    [HttpPost]
        public ActionResult LogIn(User user)
        {
            string message = "";
            DynamicParameters param = new DynamicParameters();
            param.Add("@Username", user.Username);
            param.Add("@UserID", user.Password);

            if (ModelState.IsValid)
            {
                if (DapperORM.ExecuteReturnScalar<User>("LogInUser", param) == null)
                {
                    message = "Success!";
                }
                else
                {
                    message = "Username or Password is incorrect!";
                }
            }
            else
            {
                message = "Required fields.";
            }

            if (Request.IsAjaxRequest())
            {
                return Json(message, JsonRequestBehavior.AllowGet);
            }
            else
            {
                return RedirectToAction("Index", "Document");
            }
        }

【问题讨论】:

  • 提交按钮没有 .submit() 事件 - &lt;form&gt; 有 - 它的 $("form").submit(function () { .... }(或提供 &lt;form&gt;id 属性并将其用作选择器)
  • 然后你需要取消默认提交,否则你将提交两次
  • 将提交按钮代码包装在 $(document).ready(function(){ ...here... });
  • 并使用var dataObject = $(this).serialize();(您在创建对象时已经打错了 - 您没有属性名称UsernName
  • 对不起先生。这不应该是 .submit 而是 .click 但仍然无法正常工作。

标签: jquery json asp.net-mvc


【解决方案1】:

试试下面的代码。它会起作用的。

$(document).ready(function() {

    $("form").submit(function(e) {

        e.preventDefault();

        // rest code goes here

    });
});

这里我做了两处修改。

  1. 首先,我将代码包装在 document.ready() 中。
  2. 其次,我在表单而不是按钮上应用了submit 事件。
  3. 第三,我用过e.preventDefault()。这将阻止提交按钮单击执行整页回发。

【讨论】:

  • 不,不会!如果脚本在 OP 显示的 html 之后,则不需要 document.ready()。并且提交按钮没有.submit() 事件
  • 是的..我已经更正了我的答案。在表单上添加了提交事件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 2018-01-07
  • 2015-07-14
相关资源
最近更新 更多