Renvoyer l'objet Json de l'action du contrôleur vers jQuery

Je suis d'essayer de le faire fonctionner correctement (2 jours maintenant). Je suis en train de travailler sur un journal où je vais appeler le contrôleur de l'action à partir de jQuery, en lui passant en paramètre un objet JSON (en utilisant json2.js et le retour dans un objet Json à partir du contrôleur. Je suis en mesure d'appeler à l'action de l'amende, mais au lieu d'être en mesure de mettre la réponse où je veux juste une nouvelle fenêtre s'ouvre avec cet imprimé sur l'écran:

{"Message":"Invalid username/password combination"}

Et l'URL ressemble à http://localhost:13719/Account/LogOn donc, au lieu d'appeler à l'action et de ne pas avoir à recharger la page, c'est la prise de l'utilisateur du contrôleur, ce qui n'est pas bon.

Donc maintenant un peu de code, tout d'abord le code du contrôleur

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl = "")
{
    if (ModelState.IsValid)
    {
        var login = ObjectFactory.GetInstance<IRepository<PhotographerLogin>>();

        var user = login.FindOne(x => x.Login == model.Username && x.Pwd == model.Password);

        if (user == null)
            return Json(new FailedLoginViewModel { Message = "Invalid username/password combination" });
        else
        {
            if (!string.IsNullOrEmpty(returnUrl)) 
                return Redirect(returnUrl);
            else 
                return RedirectToAction("Index", "Home");
        }
    }
    return RedirectToAction("Index", "Home");
}

Et le jQuery, le code

$("#signin_submit").click(function () {
    var login = getLogin();
    $.ajax({
        type: "POST",
        url: "../Account/LogOn",
        data: JSON.stringify(login),
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        error: function (xhr) {
            $("#message").text(xhr.statusText);
        },
        success: function (result) {

        }
    });
});

function getLogin() {
    var un = $("#username").val();
    var pwd = $("#password").val();
    var rememberMe = $("#rememberme").val();

    return (un == "") ? null : { Username: un, Password: pwd, RememberMe: rememberMe };
}

Dans le cas où vous avez besoin de voir le réel formulaire de connexion qui est ainsi

<fieldset id="signin_menu">
<div>
<span id="message"></span>
</div>
<% Html.EnableClientValidation(); %>    
<% using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { @id = "signin" }))
{%>
<% ViewContext.FormContext.ValidationSummaryId = "valLogOnContainer"; %>
<%= Html.LabelFor(m => m.Username) %>
<%= Html.TextBoxFor(m => m.Username, new { @class = "inputbox", @tabindex = "4", @id = "username" })%><%= Html.ValidationMessageFor(m => m.Username, "*")%>
<p>
<%= Html.LabelFor(m=>m.Password) %>
<%= Html.PasswordFor(m => m.Password, new { @class = "inputbox", @tabindex = "5", @id = "password" })%><%= Html.ValidationMessageFor(m => m.Password, "*")%>
</p>
<p class="remember">
<input id="signin_submit" value="Sign in" tabindex="6" type="submit"/>
<%= Html.CheckBoxFor(m => m.RememberMe, new { @class = "inputbox", @tabindex = "7", @id = "rememberme" })%>
<%= Html.LabelFor(m => m.RememberMe) %>
<p class="forgot"> <a href="#" id="forgot_password_link" title="Click here to reset your password.">Forgot your password?</a> </p>
<p class="forgot-username"> <a href="#" id="forgot_username_link" title="Fogot your login name? We can help with that">Forgot your username?</a> </p>
</p>
<%= Html.ValidationSummaryJQuery("Please fix the following errors.", new Dictionary<string, object> { { "id", "valLogOnContainer" } })%>
<% } %>
</fieldset>

Le formulaire de connexion est chargé sur la page principale avec

<% Html.RenderPartial("LogonControl");%>

Pas sûr que cela n'a aucune incidence sur le présent ou non, mais pensé que je le mentionne.

EDIT: Le formulaire de connexion est chargé similaire à la connexion de Twitter, cliquez sur un lien et la forme des charges avec l'aide de jQuery & CSS

source d'informationauteur PsychoCoder