2010-08-09 93 views
3

此问题仅与ASP.NET Forms Authentication without Redirect有关,但我无法使其工作。 MVC 2改变了它的脚本文件和他们现在得到了为这里列出:使用ASP.Net MVC进行Ajax登录2

http://www.asp.net/ajaxlibrary/CDNAjax4.ashx

现在我只是在黑暗中,但试错的拍摄已经收窄我到包括

MicrosoftAjax.js
MicrosoftAjaxCore.js
MicrosoftAjaxComponentModel.js
MicrosoftAjaxSerialization.js
MicrosoftAjaxNetwork.js
微软AjaxWebServices.js
MicrosoftAjaxApplicationServices.debug.js

的问题是我现在得到的JavaScript例外:

微软JScript运行时错误:Sys.InvalidOperationException:到Web服务的路径尚未确定。

从谷歌上搜索周围,我发现这条道路应该是“〜/ ScriptServices_AuthenticationService.asmx”,但做这样的事情:

Sys.Services._AuthenticationService.DefaultWebServicePath = "~/ScriptServices_AuthenticationService.asmx"; 

不工作(我假定这是一个私有成员)。所以,这个问题,有没有人知道如何获得ajax/async FormsAuth的工作?有什么js文件各种MS ajax服务依赖的权威性指南?最后,如果以上都不是,是否有办法在服务器端执行FormsAuth,使其不重定向(这样我就可以用ajax形式调用控制器动作)? ...我尝试使用FormsAuthentication.SetAuthCookie(),但似乎并没有为我工作。

编辑: 我发现FormsAuthentication.SetAuthCookie()实际上正在工作,但它需要关闭响应流(当然,当缓冲区被发送并且cookie被设置时)。这对我来说不起作用,因为这对我来说太迟了。

编辑: 我正在尝试的完整描述可能是必要的。我有一个Ajax表单用于创建一个新帐户。在服务器端,我创建了帐户和登录名。在前端,我等待ajax完成事件,然后将我的注册向导表单提交到下一个页面,该页面将介绍其他注册步骤。在伪代码中,控制器动作的样子:

public JsonResult CreateAsync(LoginForm form) 
{ 
    CreateAccount(form); 

    FormsAuthentication.RedirectFromLoginPage(form.Email, false); 

    return Json(
     new 
     { 
      Email = form.Email, 
      Name = form.Name, 
      Message = "Success" 
     }); 
} 

用于登录该方法结束响应流,然后将客户端Ajax被混淆。我已经尝试过FormsAuth.SetAuthCookie,但遇到了上述问题。

+0

似乎他们已经在发布.NET 4/VS2010和ajax-libraries时对Sys.Services命名空间做了重大更改......无法自己弄清楚... – 2010-08-09 21:26:20

回答

-1

你如何渲染你的表单?你使用Html.Form还是Ajax.Form?如果您使用Ajax.Form(甚至是Ajax.ActionForm),则可以在不重定向的情况下将登录信息发送给控制器,甚至可以在客户端返回回调后决定何时重定向。不需要服务,并且身份验证状态在服务器端设置并传播到客户端。

如果你想尝试这种方法,我有一个完整的代码。我决定不以正确的方式展示它,因为它可能会对你的架构产生相当大的变化,你可能不想这样做。如果你想我会在这里发布。

+0

我正在使用Ajax。形成。你打电话给你的控制器进行身份验证?我已经做了很多你说的,但显然,FormsAuthentication.RedirectFromLoginPage会自动执行重定向。重定向破坏了我的返回响应流,Ajax帖子最终失败了JS异常(MS ajax脚本不知道如何解析)。 – xanadont 2010-08-12 21:39:34

+0

我对这个问题增加了更多的说明。 – xanadont 2010-08-12 21:49:16

-1

只要使用jQuery来调用你的控制器方法就好。

$("#login_button").click(function(){
$.ajax({url:"/Controller/CreateAsync", data:{Email:"[email protected]", Password:"asdfasfd"}, type:"POST", dataType: "json",
success:function(data){ //do something
}) });

有关文档,请看这里。 http://api.jquery.com/jQuery.ajax/

0

哦,没关系。其实你应该使用FormsAuthentication.Authenticate()而不是RedirectFromLoginPage。

如果您想将方法作为JSON请求调用,您需要自行实现此行为。

相关问题