我是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。
如果我错过了什么,有人可以建议我吗?
答案 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");