2009-07-31 7 views
6

Sto cercando di implementare un accesso ajax sul lato client su Asp.Net MVC. Avevo questa configurazione su WebForms, ma ora che mi sono trasferito su MVC mi stanno dando dei problemi.Come implementare un accesso Ajax dal lato client su Asp.Net MVC (Un collegamento alla soluzione per Asp.Net Webforms è qui)

Se vuoi un tutorial su lato client Ajax Accesso per ASP.NET Webforms, lo si può trovare here - Facile, A ++

Ora ... per qualche motivo non funziona per Asp. MVC netto.

Ho usato esattamente lo stesso tutorial di Webforms, tranne quando esegue ssa.login() (equivalentemente: Sys.Services.AuthenticationService.login()) non sta facendo nulla.

Ho avvisi sia nella funzione onLoginComplete() che nella funzione onError(). Come pure ho un avviso prima che lo ssa.login viene chiamato e subito dopo ...

function loginHandler() { 
    var username = $("#login_UserName").val(); 
    var password = $("#login_Password").val(); 
    var isPersistent = $("#login_RememberMe").attr("checked"); 
    var customInfo = null; 
    var redirectUrl = null; 
    // Log them in. 
    alert("try login"); 
    ssa.login(username, 
         password, 
         isPersistent, 
         customInfo, 
         redirectUrl, 
         onLoginComplete, 
         onError); 
    alert("made it here"); 
} 

I primi fuochi di avviso, ma il secondo non fa che significa che la funzione sta venendo a mancare.
Ecco la funzione ho tirato da Asp.Net Ajax per mostrare:

function(c, b, a, h, f, d, e, g) { 
    this._invoke(this._get_path(), "Login", false, { userName: c, password: b, createPersistentCookie: a }, Function.createDelegate(this, this._onLoginComplete), Function.createDelegate(this, this._onLoginFailed), [c, b, a, h, f, d, e, g]); 
} 

Qualcuno ha qualche idea del perché sta fallendo?

risposta

6

Si sta rendendo questo più complicato di quanto deve essere. Tutto ciò che devi fare è chiamare il tuo account/metodo di accesso con la chiamata AJAX. Non è necessaria la complicazione del servizio di autenticazione, anche se probabilmente si desidera rilevare se si sta effettuando l'accesso tramite AJAX e si restituisce JSON anziché una vista.

function loginHandler() { 
    var username = $("#login_UserName").val(); 
    var password = $("#login_Password").val(); 
    var isPersistent = $("#login_RememberMe").attr("checked"); 
    var customInfo = null; 
    var redirectUrl = null; 
    // Log them in. 
    alert("try login"); 
    $.ajax({ 
     url : '<%= Url.Action("Login", "Account") %>', 
     type: 'post', 
     dataType: 'json', 
     data: { username: username, 
       password: password, 
       isPersistent: isPersistent, 
       }, 
     success: onLoginComplete, 
     error: onError 
    }); 
    alert("made it here"); // this will execute before the callback completes... 
} 
+0

Wow, non ho mai nemmeno pensato a quella haha. Ottima idea, grazie! Come faccio a determinare se accedo o meno tramite AJAX? – Matt

+0

MVC fornisce un'estensione a HttpRequestBase, HttpContext.Request.IsAjaxRequest. Controlla se c'è un'intestazione X-HTTP-Requested-With impostata su XMLHTTPRequest. – tvanfosson

Problemi correlati