2016-01-06 24 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中所述。