2016-07-28 60 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。 –

相关问题