0

以下のコードには、従業員に関する情報を含むフォームがあります。合言葉を感じて投稿してください。パスワードが正しければ、ユーザーはそのパスワードにリダイレクトされます/Dashboard

パスワードが間違っている場合、エラー ( _ErrorPartial) をMyErrordiv に表示してフォームを表示したい。フォームとメッセージを 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")ます。次に、コードのように URL をハードコーディングしないでください。そのためにUrlHelper/Account/Loginを使用してください。3 つ目は、送信ボタンのデフォルトの動作を防止する必要があることです。変更を参照してください。

$(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 に答える