【问题标题】:Post data from angularjs to MVC action method which returns a view将数据从 angularjs 发布到返回视图的 MVC 操作方法
【发布时间】:2017-08-02 08:24:59
【问题描述】:

我的视图中有一个按钮,单击该按钮时我想重定向到带有对象的 mvc 操作方法。然后该操作方法将返回另一个视图,然后将其显示给用户。

这是按钮

<button id="btnPreview" type="button" class="btn" ng-click="RedirectToBuyFlow(PreviewOfferId)" ng-model="PreviewOfferId">Preview Offer</button>

这是在点击上述按钮时调用的函数。

$scope.RedirectToBuyFlow = function (PreviewOfferId) {
        if (PreviewOfferId != null && PreviewOfferId != undefined && PreviewOfferId != "") {
            $http.post("/App/MockBuyflow/Qualify", PreviewOfferId);
        }
    }

控制器名称为MockBuyflow,动作方法如下

    [HttpPost]
    public virtual ActionResult Qualify(string OfferId)
    {
        //do something 
       return(view);
    }

问题是它永远不会影响我的操作方法。但是,如果我使用

而不是 $http.post
window.location.href="/App/MockBuyflow/Qualify?OfferId=3036"

它工作正常。但是因为我必须做一个发布请求,所以我不能使用 window.location.href。我在帖子中做错了什么? 请帮忙。

【问题讨论】:

  • 您是否检查了浏览器的控制台是否分配了 $http 模块?

标签: angularjs redirect model-view-controller


【解决方案1】:

当你只是将数字添加到 $http 方法时,它只会将它放在请求的 Http 正文中。

而 ASP.NET MVC,不知道用什么映射它,将跳过它。

改为这样做:

$http.post("/App/MockBuyflow/Qualify", {OfferId: PreviewOfferId});

{OfferId: PreviewOfferId}

您正在向服务器发送一个 JSON 对象,ASP.NET 将知道您希望将该值映射到您在操作上的 OfferId 输入。


我也相信在以后的ASP.NET MVC版本中,可以使用[FromBody]属性,指定可以在请求体中找到值,如下:

Javascript:

$http.post("/App/MockBuyflow/Qualify", PreviewOfferId);

C#:

[HttpPost]
public virtual ActionResult Qualify([FromBody]string OfferId)
{
    //do something 
   return(view);
}

【讨论】:

  • 她不能在 url 中附加。她清楚地提到了它
  • 我的代码正在运行,但最后我们返回(视图)这没有加载我的视图
  • 我猜这不会起作用,因为 $http 有回调 then() ..你必须返回到同一页面,所以其他视图不会被呈现。
  • @GurunathRao 您正在退出的场景与我的回答或原始问题无关。如果您遇到问题,请考虑创建一个新问题。这个问题严格来说是关于为什么在 ASP.NET 控制器中没有接收到正在发送的参数。 $q 承诺库或 $http 对它的使用与此无关。
猜你喜欢
  • 2013-03-16
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多