【问题标题】:MVC 5 Cannot get another view to loadMVC 5 无法加载另一个视图
【发布时间】:2015-04-03 17:05:46
【问题描述】:

在初始加载我的 MVC 项目后,我无法加载另一个视图。我正在使用 ajax 调用在名为 SlideView 的控制器中运行名为 SlideLayoutView 的方法。

这里是ajax调用:

     $.ajax({
                url: "/SlideView/SlideLayoutView",
                type: "POST",
                contentType: "application/json; charset=utf-8",
                data: JSON.stringify(id),
                success: function (result) {

                },
            });

这是它的路线:

        //slide layout view
        routes.MapRoute("SlideViewPage",//Route name
                        "SlideView/SlideLayoutView/{id}",//URL
                        new { controller = "SlideView", action = "SlideLayoutView", id = UrlParameter.Optional },// paramter defaults
                        new[] { "ChootaAuthor.web.Controllers" });

这是 SlideViewController 中的方法:

        public ActionResult SlideLayoutView(int id = 0)
    {
        ViewBag.Message = "Slide View Page";

        var model = new SlideViewModel();

        model.slideID = 1;
        model.slideTitle = "test";

        return View("SlideLayoutView", model);
    }

如果我运行视图本身,它可以正常工作。如果我使用 /SlideView/SlideLayoutView/-1 导航到它,它工作正常。但是如果我返回视图,它不应该也能正常工作吗?请帮忙

【问题讨论】:

  • 我不太明白您遇到的问题。您的代码可以正常工作,但是您在 DOM 中注入视图的部分丢失了。这就是您的 AJAX success 函数的全部内容吗?你如何插入你的result
  • 应该是data: { id: 1 },(假设你想将1传递给控制器​​)​​
  • id 顺利通过,返回 View 被命中。我认为 return View 会显示视图,从那时起我需要做些什么吗?
  • 对于临时解决方案,我已经硬编码了网址,但不希望它保持这样
  • 你的ajax成功回调中result的值就是你返回的视图。你想用它做什么?

标签: c# ajax model-view-controller asp.net-mvc-5 asp.net-mvc-views


【解决方案1】:

调用视图后,您没有对 AJAX 结果做任何事情。

 success: function (result) {
NOTHING HAPPENS HERE, SO YOU CANT EXPECT ANYTHING TO HAPPEN
                },

【讨论】:

  • 当时我认为我不需要做任何事情,我认为控制器方法中的返回视图会加载它。如何将当前视图替换为返回的视图?
  • 您正在使用 AJAX 执行并返回视图。这100%有效。但是,您没有对它做任何事情。客户端代码无法以您认为(或假设)的方式与服务器端代码交互。在这种情况下不要使用 AJAX,只需对视图进行正常发布即可。如果您不希望页面重新加载,请使用 AJAX,但实际上对 AJAX 结果执行一些操作。在 Chrome 中,您可以使用其开发工具的 XHR 部分来查看使用 AJAX 时从服务器返回的结果。您需要使用结果更新 DOM 才能看到结果
  • 我明白了。我的印象是从我的控制器方法返回视图会以某种方式加载新视图。我是 mvc 的新手,并认为这就是它的工作方式。我现在用我的 onsuccess 消息中的结果替换页面包装器 div 内容。感谢您的帮助
  • 不用担心。这些天,MVC 在后台为我们做了这么多,你做出这样的假设并不让我感到惊讶:D
猜你喜欢
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 2015-11-23
  • 2015-04-11
相关资源
最近更新 更多