0

在下面的代码中,我有一个包含一些员工信息的表单。我想感受一下密码和帖子。如果密码正确,用户将被重定向到该密码是/Dashboard可以的。

当密码错误时,我想_ErrorPartial在 div 中显示错误 ( )MyError并且仍然可以看到表单。我想在 div ( MyError) 中查看表单和消息。使用下面的代码,当密码错误时,我看到错误消息,但在空白页面上,而不是带有布局 + 表单 + 错误消息的页面

任何的想法 ?

谢谢,

我的页面 :

    @model MyApp.EmployeeModel
    <script type="text/javascript">
        $(document).ready(function () {
            $(".").click(function () {

                $.ajax({
                    url: '/Account/Login',
                    type: "Post",
                    data: $('#MyForm').serialize(),
                    success: function (result) {
                            alert('Im here');
                        $("#MyError").html(result);
                        //Here is code to detect error or not but removed
                    }
                });

            });
        });
    </script>

    <div id="MyError"></div>
    @using (Html.BeginForm("Login", "Account", FormMethod.Post, new { id = "MyForm" }))
    {
        @Html.AntiForgeryToken()
        <div>
            @Html.LabelFor( m => m.FirstName)
            <div>
                @Html.HiddenFor(model => model.Username)
                @Html.LabelFor( m => m.Password)
                @Html.PasswordFor(m => m.Password)
                <input type="submit" class="jqClick" />
            </div>
        </div>
    }

控制器 :

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(EmployeeModel employeeModel)
{
    var Errors = new List<string>();
    var employee = .... //Get employee from DB
    if (employee == null)
    {
        Errors.Add("Employee trouble");
        return PartialView("_ErrorPartial", Errors.AsEnumerable());
    }

    return RedirectToAction("Index", "Dashboard");
}

我的 _ErrorPartial 视图:

@model IEnumerable<string>
<div id="DisplayError">
    @{ var error = string.Empty; }

    @foreach (var err in Model){
        error += err + "<br>";
    }
    @Html.Raw(error)
</div>
4

2 回答 2

1

您必须对您的 javascript 代码进行一些更改。首先,将 jQuery 选择器替换$(".")为特定的选择器,例如$(".jqClick"). 其次,永远不要/Account/Login像在你的代码中那样硬编码 url ,为此使用UrlHelper。第三件事是,您必须防止提交按钮的默认行为。查看更改:

$(document).ready(function () {
    $(".jqClick").click(function (e) {
        e.preventDefault();
        $.ajax({
            url: '@Url.Action("Login", "Account")',
            type: "Post",
            data: $('#MyForm').serialize(),
            success: function (result) {
                alert('Im here');
                if (result.redirectUrl)
                    window.location.href = result.redirectUrl;
                else
                    $("#MyError").html(result);
                //Here is code to detect error or not but removed
            }
        });
    });
});

如果登录成功,您还需要Login稍微更改操作以进行重定向:

public ActionResult Login(EmployeeModel employeeModel)
{
    var Errors = new List<string>();
    var employee = .... //Get employee from DB
    if (employee == null)
    {
        Errors.Add("Employee trouble");
        return PartialView("_ErrorPartial", Errors.AsEnumerable());
    }
    return Json(new { redirectUrl = Url.Action("Index", "Dashboard") });
}
于 2013-04-01T08:33:56.243 回答
0

您从服务器端抛出的可能错误不会出现在成功函数中。相反,您应该在下面

error:function(response)
{

   //your code here

}

只需从控制器抛出异常。

于 2013-04-01T07:53:10.963 回答