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中的异步页面加载

通过 MVC 局部视图注入时,Bootstrap 模态显示和隐藏事件未触发

Spring-Boot MVC 模板未加载(未找到 404)

布局文件未加载和路由问题 MVC?

如何在MVC视图之间显示“正在加载”

使用 javascript 重新加载 mvc/razor 部分视图