不显示来自控制器的视图,即使调试器进入查看

时间:2016-07-28 14:24:17

标签: c# asp.net-mvc asp.net-mvc-4

我是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是因为我想在表单get submit之前调用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 - &gt; Success.cshtml - &gt; _Layout.cshtml。

如果我错过了什么,有人可以建议我吗?

2 个答案:

答案 0 :(得分:2)

由于您使用Ajax.BeginForm辅助方法进行ajax调用,因此需要指定在DOM中替换(ajax调用)的响应。您可以使用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的内容( with Id YourDivToShowResult ),并返回响应,这是Success视图返回的标记。

此外,由于我们正在显示部分页面更新,您可以考虑返回部分视图。

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

这将从没有布局的任何一个视图返回标记。

答案 1 :(得分:-1)

如果你想转到其他视图,你必须重定向页面,如:

return RedirectToAction("Success", "Downloads");
相关问题