【问题标题】:to pass parameter to web api through ajax call通过ajax调用将参数传递给web api
【发布时间】:2013-05-29 18:41:20
【问题描述】:

我有以下 ajax 查询,它从控制器返回我的 json

$(document).ready(function () {
    $.getJSON(
      "api/OutletPOC/GetHomeTab?bizId=1",
      function (data) {
          $("#homeTabDesc").append(data.HomeDesc);
          $(".test").hide();
          $("#hometabcontent").show();
      });
});

控制器动作如下

[System.Web.Http.ActionName("GetHomeTab")]
    public HomeTabModel GetHomeTab(int bizId)
    {
        var outlet = db.Info.Where(t => t.BizId == bizId).SingleOrDefault();
        return new HomeTabModel 
        { 
            HomeDesc = outlet.BizHomeDesc, 
            HomeTabText = outlet.BizHomeTabText 
        };
    }

现在我的问题是:目前我正在将 bizId 的硬编码值发送到 web api。我想动态发送这个值。我怎样才能做到这一点?我的路由配置文件中有这个值。代码如下-

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{bizId}",
            defaults: new { controller = "Home", action = "Index", bizId = 1 }
        );
    }

我是新手。请帮忙!提前致谢!

【问题讨论】:

    标签: json jquery asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    不,实际上经过大量研究,我想出了这个解决方案,这对我来说很好......

    在控制器中,

    public ActionResult Index(int bizId)
        {
            ViewBag.BizId = bizId;
            return View();
        }
    

    在视图中,

    $(document).ready(function () {
        $.getJSON(
          "api/OutletPOC/GetHomeTab?bizId=@ViewBag.BizId",
          function (data) {
              $("#homeTabDesc").append(data.HomeDesc);
              $(".test").hide();
              $("#hometabcontent").show();
          });
    });
    

    【讨论】:

    • 仅供参考,您的解决方案使用的框架 (ASP.NET MVC) 与您在问题中使用的框架 (ASP.NET Web API) 完全不同
    • 不,m 使用 mvc4 框架。它既是问题也是答案的问题
    • 在您原来的问题中,您返回的是在 MVC 中无法执行的 HomeTabModel。您在问题中声明了 Web API。在您的回答中,您使用了 Web API 中不存在的 ActionResult。
    • 索引动作写在其他控制器中。此索引操作调用调用 apicontroller 的视图
    【解决方案2】:

    您可以将数据对象作为 GetJson 调用的一部分传递。

    $(document).ready(function () {
        $.getJSON(
          "api/OutletPOC/GetHomeTab",{bizId : 1},
          function (data) {
              $("#homeTabDesc").append(data.HomeDesc);
              $(".test").hide();
              $("#hometabcontent").show();
          });
    });
    

    更进一步,您可以将其包装在一个函数中。

    function makeCall(id)
    {
    
         $.getJSON("api/OutletPOC/GetHomeTab",{bizId : id},
                  function (data) {
                      $("#homeTabDesc").append(data.HomeDesc);
                      $(".test").hide();
                      $("#hometabcontent").show();
                  });
    
    }
    

    还要考虑使用 Promise。

    $.getJSON().then().done();

    【讨论】:

    • 不,实际上经过大量研究,我想出了这个解决方案,这对我来说很好......
    • 你最后用了什么解决方案,如果你的意思是我提出的解决方案,你可以将其标记为答案需要积分:-)
    • 我无法在 20 小时内将我的答案标记为答案。请您标记一下。
    猜你喜欢
    • 2019-05-14
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 2017-04-14
    • 2015-07-10
    • 1970-01-01
    • 2012-04-07
    • 2014-05-02
    相关资源
    最近更新 更多