C# MVC视图未加载

C# MVC视图未加载,c#,asp.net-mvc,view,C#,Asp.net Mvc,View,我有一个名为ConfirmController.cs的控制器,在Views文件夹中有一个名为Confirm的文件夹,其中有一个名为Payment.cshtml的视图 提交表单时,ConfirmController上的函数将运行,并将模型保存到数据库 根据模型的属性,它将按照预期正确返回付款视图,或者重定向到另一个url if (!save.preview) { return this.View("Payment");

我有一个名为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) {}

这个调用很好,一切都按预期进行,我只是没有看到浏览器中的视图更改

这是一个ajax调用,您可以在浏览器开发人员工具网络选项卡中看到该调用。服务器将对此调用返回一些响应,根据您的示例,在本例中这将是html。但浏览器不会选择那个html,因为并没有指示它这样做。
         $.ajax({
         url: '../Confirm/ConfirmFromPreview',
         type: "POST",
         data: data
    })
ajax的本质是调用服务器上的端点,以异步方式获取一些数据(本例中为html)。然后作为开发人员,我们需要编写代码来获取这些数据并更新浏览器DOM

例如,您可能必须使用Jquery手动更新dom。比如:

$('#targetlementid').html(“从服务器接收的响应”)


因此,请将响应保留在一个变量中,然后更新DOM。

使用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
}
如果需要重定向,则必须使用完整的url

return Redirect("http://www.myapp.com/save");


或者直接调用同一控制器的save方法(如果您可以或使save metod成为从多个控制器访问它的方式)-返回save(model)。如果要更改视图,代码的最后一行应返回PartialView。

请提供操作方法的签名。没有它很难找出什么是错误的。