【问题标题】:AngularJs $http.post does not render new ViewAngularJs $http.post 不呈现新视图
【发布时间】:2014-10-17 23:50:51
【问题描述】:

我有这个 AngularJs http.post-function。在我看来,我有一个 Id:s 列表。当我点击任何这些 Id:s 时,这个函数就会被命中。

$scope.GoToSinglePost= function (id) {
        console.log(id);
        if (confirm("Go to blogPost with " + id + " ?")) {

            $http.post("/Home/SingleBlogPost", { postId: id });

        }
    };

这里一切正常,这篇文章让我看到了我的 mvc c# actionresult 女巫是下面这个:

public ActionResult SingleBlogPost(int? postId)
    {
        var singlePost = _repo.GetSinglePost(postId);

        var viewModel = new SingleBlogPostViewModel()
        {
            Post = singlePost
        };

        return View(viewModel);
    }

在此 ActionResult 中,我从 angularPost 发送的 postId 进入参数 int? postId actionResult 开始渲染,如果我调试它,我可以看到它会进入它的视图(SingleBlogPost.cshtml)

但是如果我在浏览器中观看会发生什么,一切都保持不变。我仍然在我从一开始的相同观点。为什么我的 SingleBlogPost Actionresult-view 不在浏览器中呈现?为什么我仍然在同一页面上,即使 SingleBlogPost 方法被击中并且在我调试时仍然显示它的视图?

//谢谢

【问题讨论】:

  • 您必须添加一个事件处理程序来处理数据。 angular 不会自动知道你想对响应做什么。请参阅此处的“一般用法”部分:docs.angularjs.org/api/ng/service/$http
  • 你为什么首先使用 AngularJS 和 ASP.NET? AngularJS 旨在处理所有模板,因此将它与服务器生成的动态 HTML 一起使用几乎没有意义。 Angular 的方式是仅使用 ASP.NET 作为业务后端,为 Angular 生成数据以进行渲染。 WebApi 是你应该用来补充 Angular 的。
  • @crhis 使用 ASP.NET 作为 Angular 后端的原因有很多,关于解耦的整个故事,你已经制作了一个后端,你想与其他应用程序共享你的后端,等等。在我的工作中,我已经看到了这个金融业务的解决方案,所以它毕竟不是那么疯狂
  • 也许吧,但是在服务器端和客户端都有一个 MVC 框架会增加很多复杂性。你应该有充分的理由来证明这一点。如果只是关于数据绑定,还有更多轻量级的 Angular 替代品,它们不会尝试成为成熟的 MVC 框架。
  • @chris 我需要在我的项目中使用 MVC 框架。您建议将数据绑定到我的 MVC 控制器而不是使用 angularJs 的替代方法是什么?我首先拥有 Angular 的原因是我通过 angularJs 即时搜索呈现了我的 Id:s 列表。我发现 angular-instantSearch 非常有用

标签: c# javascript asp.net-mvc angularjs


【解决方案1】:

在操作完成后尝试添加successthen 以在那里执行进一步的操作,例如:

$http.post("/Home/SingleBlogPost", { postId: id }).success(function(data) {
    //data is your response from server to the request;
    //do something with data here, like changing to correct view;


});

【讨论】:

  • 感谢您的回复。我是角度的新手。您能否给我一些进一步的建议,我应该怎么做?
  • 感谢您的回答!我在 $http.post 中添加了window.location = "blogg/" + id;,现在一切正常!
  • 因为是异步的,所以你必须等待请求被处理才能播放响应,这就是成功或者是承诺(或类似的)
  • 很高兴为您提供帮助,我也是有棱角的新手,这就是为什么我会阅读如此棱角分明的问题;)
  • 您不应该直接在控制器中设置 window.location,因为这会破坏可测试性——这是首先使用 AngularJS 的主要原因之一。请改用 $location 服务。见docs.angularjs.org/guide/$location
猜你喜欢
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-22
相关资源
最近更新 更多