2012-02-13 2 views
2

後にリダイレクトしません。 GetDistance()に投稿すると、/ Home/ShowDistanceページには行かず、/ Home/Indexページにとどまります。 latlonの値がnullでないことを確認しているので、ブラウザを/ Home/ShowDistanceにリダイレクトする必要があります。あなたのIndex.cshtmlビューでMVC3は、私は私のホームコントローラで次のアクションを持っているポスト

public ActionResult Index() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult GetDistance(string lat, string lon) 
{ 
    if (lat != null && lon != null) 
    { 
     Session["latlon"] = new LatLon { Latitude = double.Parse(lat), Longitude = double.Parse(lon) }; 
     return RedirectToAction("ShowDistance"); 
    } 
    return RedirectToAction("Index");  
} 

public ActionResult ShowDistance() 
{ 
    //... 
    return View(); 
} 
+0

それはあなたがGETに変更した場合に動作します - ちょうどURLに値をハック? –

+2

条件文にブレークポイントを設定して、実際にその条件を満たしていることを確認します。私はあなたが 'Index'にリダイレクトしているのではないと思います。 –

+0

デバッグで実際にステップスルーすれば、正しいリダイレクトにヒットしますか? –

答えて

8

(それは、フォームをレンダリングするために使用されているものとは別の名前を持っているので)あなたが投稿する正しいコントローラのアクションを指定していることを確認してください。だから、代わりに:

@using (Html.BeginForm()) 
{ 
    ... 
} 

使用:

@using (Html.BeginForm("GetDistance", null)) 
{ 
    ... 
} 

それとも、GetDistanceアクションが、AJAX呼び出しを呼び出すために、標準のHTML <form>を使用しない場合、それはその完全に正常ですブラウザのURLは/Home/Indexのままです。 AJAXの全体的なポイントは、現在のページ(あなたの場合は/Home/Index)から離れずに、サーバーへの非同期HTTPリクエストを実行することです。このような場合は、あなたが成功コールバックにクライアント上でそれを行う必要がありますリダイレクトしたい場合:

$.ajax({ 
    url: '@Url.Action("GetDistance")', 
    type: 'POST', 
    data: { lat: '123', lon: '456' }, 
    success: function(result) { 
     window.location.href = result.redirectTo; 
    } 
}); 

また、代わりにそれをリダイレクトするJSONを返すように、あなたのGetDistance POSTアクションを変更する必要がありますそれにリダイレクトするターゲットURLを含むオブジェクトは、成功コールバックで使用することができます:

明らか
[HttpPost] 
public ActionResult GetDistance(string lat, string lon) 
{ 
    if (lat != null && lon != null) 
    { 
     Session["latlon"] = new LatLon { Latitude = double.Parse(lat), Longitude = double.Parse(lon) }; 
     return Json(new { redirectTo = Url.Action("ShowDistance") }); 
    } 
    return Json(new { redirectTo = Url.Action("Index") }); 
} 

敗北、この種の私が言ったようにAJAXの全体のポイントは、への非同期要求を実行することで少しので、AJAXの目的サーバーと同じページに滞在します。したがって、この場合は標準のHTML <form>を使用してください。私はどちらかあなたの緯度と経度をモデルバインダーが理解方法で通じ来ていない、またはあなたがGetDistanceに実際に掲載されていないことを推測している

+0

を言い換えれば:!**あなたは、AJAXをリダイレクトすることはできません** – gdoron

+1

@gdoron、私は私の答えで実証されたように、あなたは完全にAJAXをリダイレクトするが、このことができます! AJAXの目的を破る –

+0

これはajaxとのリダイレクトではありません。 ** Ajax成功後のリダイレクト**です。全く違うもの。 – gdoron

0

()。 (サイドノートとして、ゲットと呼ばれるものへの投稿は奇妙なものです)。

あなたのビューからいくつかの情報が含まれている場合、おそらくそれが役立つだろう。

関連する問題