Ajax post方法没有在没有布局的View中触发MVC控制器方法

时间:2014-08-27 02:46:23

标签: jquery ajax asp.net-mvc asp.net-mvc-4

我有没有布局的登录页面。我尝试使用ajax post方法登录,但该方法没有点击mvc Controller方法。

当我尝试登录成功部分的警告框时弹出空白。如果此方法命中该警报应该有一些记录。

请帮我解决这个问题。

Ajax方法:

$('#Login').on('click', function (event) {

    event.preventDefault();
    var LoginUrl = $("#LoginUrl").val();
        var user = {
            UserName: $("#UserName").val(),
            Password: $("#Password").val(),
            RememberMe: true
        };
    debugger;
    $.ajax({
        url: LoginUrl,
        type: 'POST',
        data: user,
        success: function (data) {
            alert(data.Code);
        },
        error: function (xhr, ajaxOptions, thrownError) {
            // Reset
        }
    });

});

登录表格:

  @using (Html.BeginForm(null, null, FormMethod.Post, new { id = "formLogin" }))
                    {
                        @Html.AntiForgeryToken()
                        @Html.ValidationSummary(true)

                        <div class="form-group">
                            <div class="col-sm-12">
                                <div class="input-group">
                                    <span class="input-group-addon"><i class="fa fa-user"></i></span>
                                    @Html.TextBoxFor(m => m.UserName, new { @class = "form-control", @placeholder = "Username" })
                                    @Html.ValidationMessageFor(m => m.UserName)
                                </div>
                            </div>
                        </div>

                        <div class="form-group">
                            <div class="col-sm-12">
                                <div class="input-group">
                                    <span class="input-group-addon"><i class="fa fa-lock"></i></span>
                                    @Html.PasswordFor(m => m.Password, new { @class = "form-control", @placeholder = "Password" })
                                    @Html.ValidationMessageFor(m => m.Password)
                                </div>
                            </div>
                        </div>
                        <div class="row">
                            <div class="foot">
                                <div class="row">
                                    <a href="/Account/ForgotPassword" class="btn btn-primary btn-sm md-close"><i class="fa fa-arrow-circle-o-left"></i>Forgot Password</a>
                                    <button id="Login" type="submit" class="btn btn-primary btn-sm md-close"><i class="fa fa-arrow-circle-o-left"></i>Log me in</button>
                                </div>
                            </div>
                        </div>
                    }

脚本:

<script src="~/Scripts/js/jquery.js"></script>
<script type="text/javascript" src="~/Scripts/js/behaviour/general.js"></script>
<script type="text/javascript" src="~/Scripts/js/bootstrap.switch/bootstrap-switch.min.js"></script>
<script src="~/Scripts/js/bootstrap/dist/js/bootstrap.min.js"></script>
<script src="~/Scripts/js/boostrap.validator/dist/js/bootstrapValidator.min.js"></script>
<script type="text/javascript" src="~/Scripts/user.manager.js"></script>

2 个答案:

答案 0 :(得分:0)

如果您的警报为空(并且未定义),则您的服务器没有响应具有data.Code中任何值的对象。例如alert({}.Code);显示未定义的提醒,而data = {Code:''};alert(data.Code);显示问题中描述的空提醒。

可能最好使用控制台调试代码而不是警报。

答案 1 :(得分:0)

问题在于您在ajax请求中未指定的datatype: -

$.ajax({
    url: LoginUrl,
    type: 'POST',
    data: user,
    dataType :'JSON',   //i think controller action is returning 'JSON', specify dataType as 'JSON' here.
    success: function (data) {
        alert(data.Code);
    },
    error: function (xhr, ajaxOptions, thrownError) {
        // Reset
    }
});