MVC 视图未加载
Posted
技术标签:
【中文标题】MVC 视图未加载【英文标题】:MVC view not loading 【发布时间】:2020-11-14 15:49:55 【问题描述】:我有一个名为 ConfirmController.cs 的控制器,在 Views 文件夹中我有一个名为 Confirm 的文件夹,其中有一个名为 Payment.cshtml 的视图。
提交表单时,ConfirmController 上的一个函数运行,将模型保存到数据库。
根据模型的属性,它要么按预期正确返回支付视图,要么重定向到另一个 url。
if (!save.preview)
return this.View("Payment");
else
return this.Redirect(save.url);
重定向到另一个 url 后,那里有一个按钮,它调用 ConfirmController 上的一个函数,该函数更新模型并按预期工作。
在此处保存模型后,它应该返回视图付款,浏览器中没有任何变化,但在 VS 中使用断点我可以看到它通过加载页面,在浏览器的开发控制台中我可以看到视图返回为回复。
任何想法我在这里缺少什么?
这是返回视图支付的函数是如何被调用的,这是当它在浏览器中没有改变的时候
$.ajax(
url: '../Confirm/ConfirmFromPreview',
type: "POST",
data: data
)
动作方法签名:
[HttpPost]
public ActionResult ConfirmFromPreview(Occasions template)
这可以正常调用并按预期执行所有操作,我只是没有看到浏览器中的视图更改
【问题讨论】:
请提供您的操作方法的签名。没有它就很难找出问题所在。 【参考方案1】:这是一个 ajax 调用,您可以在浏览器开发人员工具网络选项卡中看到此调用。服务器将对此调用返回一些响应,根据您的示例,在这种情况下这将是 html。但是浏览器不会选择该 html,因为它没有被指示这样做。 ajax 的本质是调用服务器上的端点以异步方式获取一些数据(在本例中为 html)。然后作为开发人员,我们需要编写代码来获取这些数据并更新浏览器 DOM。
例如,您可能必须使用 Jquery 手动更新 dom。比如:
$('#TargrtElementId').html("从服务器收到的响应");
因此请将响应保存在变量中,然后更新 DOM。
【讨论】:
【参考方案2】:您不能使用 ajax 以这种方式显示视图或重定向。
要显示部分视图,请将您的操作更改为
return PartialView("Payment");
//you can't return Payment as a view since it will return a Layout too
并添加到您的 ajax:
success: function (result)
$(div).html(result); // div - id of your div that contains
// your Payment View
如果您需要重定向,您必须使用完整的网址
return Redirect("http://www.myapp.com/save");
或者直接调用同一个控制器的保存方法(如果你可以或使保存方法可以从多个方法中获取)-返回保存(模型)。如果您想更改视图,则代码的最后一行应返回 PartialView。
【讨论】:
以上是关于MVC 视图未加载的主要内容,如果未能解决你的问题,请参考以下文章
通过 MVC 局部视图注入时,Bootstrap 模态显示和隐藏事件未触发