Asp中的Ajax返回问题。净MVC

时间:2014-11-02 10:50:42

标签: jquery ajax asp.net-mvc

我正在使用asp.net mvc 4开发一个网站,

我有一个检查用户是否注册的方法。我使用ajax,如果用户已经注册,我想在注册网页上的div上写一条消息,如果没有,我想注册用户并返回主页。我希望它清楚。因为它似乎有点难以理解。

script type="text/javascript">
$(function() {
    $('#form0').submit(function(event) {

        event.preventDefault(); 
        var result = "";
        var form = $(this);


        $.ajax({
            url: "CheckUser", //form.attr("action"),
            data: form.serialize(),
            beforeSend: function() {
                $("#ajax-loader").show();
            },
            complete: function() {
                $("#ajax-loader").hide();
            },
            error: function(request, status, error) {
                var obj = jQuery.parseJSON(request.responseText);
                if (request.status == 403) // authorize error
                {
                    myRouting(obj.LogOnUrl, "403 error", "error");

                } else {

                  alert("Error Occured: " + error.responseText + "\nError Code: " +
     request.responseText + " -- " + request.responseText);
                    var msg = "Error: " + error + "\nErrorCode: " + request.status;
                    myRouting("", msg, "error");

                }
            },

            success: function (data) {

                $.each(data, function() {
                    result += this.Name + "\n";
                });


                myRouting("", data, "data");

            }
        });

         return false;
    });



$(function myRouting(site, message, type) {


    if (type == "error") {
        $('#searchFailed').remove();
        $('<div id="searchFailed"></div>').appendTo('#searchMain');
        $('#searchFailed').append("<p>" + message + "</p>");
    } 
    });


});
</script>

@using (Html.BeginForm("CheckUser", "Account", FormMethod.Post, new { id = "form0" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()

    <fieldset>
        <legend>Registration Form</legend>
        <ol>
            <li>
                @Html.LabelFor(m => m.UserName)
                @Html.TextBoxFor(m => m.UserName)
            </li>                 



            <li>
                @Html.LabelFor(m => m.Name)
                @Html.TextBoxFor(m => m.Name)
            </li>                       


            <li>
                @Html.LabelFor(m =>m.Password)
                @Html.PasswordFor(m => m.Password)
            </li>

            <li>
                @Html.Label("Confirm Password")
                @Html.PasswordFor(m => m.Password)
            </li>

            <li>
                @Html.LabelFor(m => m.Email)
                @Html.TextBoxFor(m => m.Email)
            </li>                             


        </ol>
        <input type="submit" value="Register" />
    </fieldset>
}

这是我的帐户控制器

   [HttpPost]
   [AllowAnonymous]
   [ValidateAntiForgeryToken]
   public ActionResult Register(User model)
   {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            try
            {

              var result =   helper.RegisterUser(model);

              if (result)
              return  RedirectToAction("Index", "Home"); //Json(Url.Action("Index", "Home"));   

            }
            catch (MembershipCreateUserException e)
            {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }
        }

        return View(model);
    }

    public ActionResult CheckUser(User model)
    {
        bool result = helper.IsUserExist(model);

            if (result)
            {
             ModelState.AddModelError("", ErrorCodeToString(MembershipCreateStatus.DuplicateUserName));

             return Content("User is already created !!!!");

           }
           return Register(model);
    }

我知道在ajax中,它不可能重定向动作,但如果我能做到这一点&#34;错误&#34;在ajax中,我可以在ajax中重定向..

返回内容始终是&#34;成功&#34;在ajax中,即使用户之前没有注册过,它仍然是成功的&#34;

1 个答案:

答案 0 :(得分:2)

不要将success事件与代码的逻辑部分/授权成功混淆。

ajax成功意味着请求已经完成..您需要检查它返回的数据,看看它是否有您确定是否成功检查用户的信息。

success事件处理程序中,检查返回的数据。

如果我是你,我将不会返回一个视图..我可能会返回JSON,它可以清楚地显示任务成功或失败的信息......以及可能的错误描述。