2016-01-06 26 views
1

你好,我实际上是新的MVC,我坚持一个问题。我到处尝试和搜索,但问题仍未解决。

我使用$http发送到MVC actionview发送模型。数据成功发送通过动作和视图,但url不会重定向到目标视图也是在我的情况下,我想发送一个模型与重定向。(我可以执行重定向与windows.location.href="success"$http.success,但我不能发送模型数据这样做)

这是我的样品试。(我在这里提供的用户名是“random”,密码为“randPassword”和我发送一个简单的数据(名称)成功视图。

JS

var config = { 
     headers: { 
      'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8;' 
     } 
    } 


    var data = $.param({ 

     UserName: $scope.user.username, 
     Password: $scope.user.password, 

    }); 

    $http.post('Login', data, config).success(function (data, status, headers, config) { 

    }).then(function() { 
     console.log(data); 

    }); 

C#动作

[HttpPost] 
[AllowAnonymous] 
public ActionResult Login(LoginModel usr) 
{  
     if (usr.UserName=="random"&&usr.Password=="randPassword") 
     { 

      Session["Username"] = usr.UserName.ToString(); 
      FormsAuthentication.SetAuthCookie(user.UserName, false); 
      return RedirectToAction("Success","Account",new {new {Name=usr.UserName}}); 
     } 
     else 
     { 
      ModelState.AddModelError("", "UserName or Password is Wrong"); 
      return View(); 
     } 

} 

我的成功观点很简单,只有成功。调试将继续在断点上查看,但不进行重定向。成功后,我可以用js重定向,但当我想发送数据并呈现视图时,情况变得复杂。谢谢 !!

+0

当您发送异步请求返回值并返回成功$ http调用,并且不会重定向到操作或返回任何视图。要重定向或在视图上显示数据,您需要在成功调用$ http时编写逻辑。 –

+0

你在说window.location.href。这将重定向到我的观点,但事情变得复杂,当我想重定向到一些模型数据的视图。 – user5630511

+0

是的,请检查你在http成功调用中得到的回应。我认为你应该从操作返回json并使用它来重定向或更新视图。 –

回答

0

该控件是与ajax调用,所以重定向实际上是从服务器端发生,并返回到javascript中的ajax调用方。 尝试从页面提交表单,重定向将发生在浏览器上。

-1

既然它是你正在做的ajax调用,你应该从你的action方法返回一个json响应。

[HttpPost] 
[AllowAnonymous] 
public ActionResult Login(LoginModel usr) 
{  
    if (usr.UserName=="random"&&usr.Password=="randPassword") 
    { 
     // do whatever you have to do 
     return Json(new { status="success"}); 
    } 
    else 
    { 
     return Json(new { status="error" ,error= "UserName or Password is Wrong"}); 
    } 
} 

而且在$ http.post通话的then事件,检查响应回来并执行重定向。

var loginUrl="@Url.Action("Login","Account")"; 

$http.post(loginUrl, data, config).then(function(res){ 
    if(res.data.status==="success") 
    { 
     window.location.href="@Url.Action("Success","Account")"; 
    } 
    else 
    { 
     alert(res.data.error); 
    } 
}); 

上面javacript代码假定您有它在你的剃刀视图和利用所述Url.Action辅助方法的所产生的相对URL的动作方法。如果您的角码位于单独的JavaScript文件中,那么您可以将URL从您的剃须刀视图传递到应用程序根目录,并使用它将URL构建到您的操作方法中,如this answer中所述。