【问题标题】:How to call nested ajax call and send object data to controller in ASP.Net MVC 5如何在 ASP.Net MVC 5 中调用嵌套 ajax 调用并将对象数据发送到控制器
【发布时间】:2017-06-02 02:04:02
【问题描述】:

我有两个控制器

  1. 设置控制器

    操作 - GetAvailableLocationsFor

  2. 家庭控制器

    动作 - 索引

我想要达到的步骤

  1. GetAvailableLocationsFor进行ajax调用,然后从成功回调中获取对象数据。此操作无需查看。
  2. 现在接收到对象数据后,在 HOMECONTROLLER 中再次调用 Index Action 的 ajax 并将对象传递到那里。

以下是我可以实现的目标。

HomeController - GetAvailableLocationsFor

public ActionResult GetAvailableLocationsFor(int accountId, int groupId)
        {
            FullConfigMV configData = SetLoader.GetSettings(accountId, groupId);
           return // HOW TO RETURN configData from Here to first ajax call
}

HomeController - 索引操作

[HttpPost]
public ActionResult Index(FullConfigMV data)
{
  //SECOND AJAX CALL SHOULD COME HERE
}

嵌套 Ajax 调用

<script>
    $(document).ready(function()
    {
        $("#tan").change(function()
        {
            alert(this.value);
            $.ajax({
                type: 'POST',
                url: '/Settings/GetAvailableLocationsFor',
                data: { accountId: 28462, groupId: 35},
                success: function (data) { // data should represent configObj

                    $.ajax({
                        type: 'POST',
                        url: '/Home/Index',
                        data: // WHAT TO WRITE HERE,
                        success: function (data) {
                            //WHATEVER
                        },
                        error: function () {
                            DisplayError('Failed to load the data.');
                        }
                    });

                },
                error: function () {
                    DisplayError('Failed to load the data.');
                }
            });


        });
    });
</script>

【问题讨论】:

  • 嗨,您真的需要第二次调用 ajax 吗?我的意思是你可以在成功回调后使用 Url.Action ('','') 和所有必需的数据。
  • return Json(configData, JsonRequestBehavior.AllowGet);data: data (但这可以简单地使用对一种方法的 ajax 调用来完成 - 不清楚为什么要使用两种方法)
  • @YashveerSingh:您能指导我如何实现这一目标吗?
  • @StephenMuecke:感谢您的回复。我在GetAvailableLocationsFor 中有一些逻辑,有时需要独立于GetAvailableLocationsFor 中的逻辑调用索引
  • @StephenMuecke 在某些情况下,我只想调用索引逻辑。在某些情况下,我希望调用GetAvailableLocationsFor 的逻辑,然后调用索引。

标签: jquery ajax asp.net-mvc asp.net-mvc-5


【解决方案1】:

更好的方法是在您的 GetAvailableLocationsFor 操作中返回重定向

return RedirectToAction("Index", "Home", configData)

然后在你的 ajax 成功而不是第二个 ajax 调用。只需处理 Home/Index 返回的任何内容。

【讨论】:

  • 你不能重定向到 POST :)
  • @StephenMuecke 你是绝对正确的。我错过了 httppost 属性。
  • 如果我采用 httppost 属性,那么这段代码可以正常工作吗?
  • @Unbreakable 这取决于调用该操作的其他内容。最好同时允许 httppost 和 httpget。例如,如果您有一个提交到 home/index 的表单,并且您没有明确告诉它通过 GET 提交,它将默认为 POST 并且如果您删除该属性则失败。
  • 所以,我把httpost和httpget都放了。现在我可以使用您的代码并在 Index Action 中获取数据吗?
【解决方案2】:

GetAvailableLocationsFor 方法返回JSON 数据。在第二次 ajax 调用后,您可以发送如下数据:

data: JSON.parse(response),

这将在Index 方法中获取参数中的数据

【讨论】:

    猜你喜欢
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-02
    相关资源
    最近更新 更多