2016-07-28 19 views
0

我是新的MVC .net。我無法從控制器調用視圖。我有調試流程。它會成功查看,但不會在屏幕上顯示視圖。不顯示視圖從控制器甚至調試器進去查看

Controller name: Downloads 
Action name: MakePayment 
Redirect view: Success //success is view of View/Downloads/Success.cshtml 

代碼:DownloadsController

[HttpPost] 
public ActionResult MakePayment(Downloads CCM) 
{ 
    if (true) 
    { 
      return View("Success"); 
    } 
    else 
    { 
      return View("Failure"); 
    } 
} 

查看

@{ 
    ViewBag.Title = "Success"; 
} 

<h2>Your transaction has been completed successfully.</h2> 

的方法,我用它來調用的ActionResult MakePayment。我在這裏使用了Ajax,因爲我想在表單提交之前調用javascript函數。

View: Index.cshtml 

@using (Ajax.BeginForm("MakePayment", "Downloads", new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, OnBegin = "payByCreditCard" })) 
{ 
    //submit button 
} 

根據return View("Success");,應該調用該視圖。事實上,當我調試流程時,它會轉到成功視圖,但不會在屏幕上顯示視圖。它保持屏幕上的舊視圖。

成功後的Degug路線:_ViewStart - > Success.cshtml - > _ Layout.cshtml。

有人可以建議我,如果我失去了什麼嗎?

+0

你有成功視圖的'ActionResult'嗎? – user1666620

+0

你的舊觀點是什麼?你能否顯示你的完整(相關)代碼,它返回兩個視圖?你也有這個'if(true)'硬編碼嗎?然後它應該返回成功視圖。 – Shyju

+0

@ user1666620是的。它使用信用卡付款。我無法發佈整個代碼。付款成功後,我只想重定向到成功頁面。 –

回答

2

既然你用Ajax.BeginForm helper方法Ajax調用,你需要指定響應(阿賈克斯調用)在DOM中被替換。您可以指定使用UpdateTargetId財產

@using (Ajax.BeginForm("MakePayment", "Downloads", new AjaxOptions { HttpMethod = "POST", 
             InsertionMode = InsertionMode.Replace, 
             UpdateTargetId="YourDivToShowResult" 
             OnBegin = "payByCreditCard" })) 
{ 
    <div id="YourDivToShowResult"></div> 
    <input type="submit" /> 
} 

由於這是一個Ajax調用,它不會做重定向。相反,它會在同一頁面中更新div的內容(和Id YourDivToShowResult),並返回成功視圖返回的標記。

此外,由於我們顯示的是部分頁面更新,因此您可能會考慮返回部分視圖。

[HttpPost] 
public ActionResult MakePayment(Downloads CCM) 
{ 
    if (everything is good) 
    { 
      return PartialView("Success"); 
    } 
    else 
    { 
      return PartialView("Failure"); 
    } 
} 

這將返回沒有佈局的那些視圖中的標記。

+0

謝謝。但我不知道如何從MakePayment ActionResult返回。你說過使用'UpdateTargetId'顯示div。如果付款失敗,我想顯示失敗結果。如果付款成功,我想顯示成功信息。你能否建議我爲'公共ActionResult MakePayment(下載CCM)'行動的代碼? –

+0

您已經有用於返回成功或失敗視圖的代碼。把你想要顯示的信息放在這些視圖文件中。 – Shyju

-1

如果你想去其他視圖,你必須重定向的頁面,如:

return RedirectToAction("Success", "Downloads"); 
+0

這是不正確的信息。您仍然可以從HttpPost操作方法返回不同的視圖(但重定向是一種理想的解決方案,因爲它遵循PRG模式) – Shyju

+0

我已經添加了視圖代碼,我從中調用ActionResult MakePayment。 –

+0

我也試過了你的代碼。它重定向到成功,但在當前屏幕上不顯示成功頁面,即使它路由到_ViewStart - > Success.cshtml - > _ Layout.cshtml。 –

相關問題