如何在 ASP.Net MVC 5 中调用嵌套 ajax 调用并将对象数据发送到控制器

Posted

技术标签:

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

我有两个控制器

    设置控制器

    操作 - GetAvailableLocationsFor

    家庭控制器

    动作 - 索引

我想要达到的步骤

    GetAvailableLocationsFor进行ajax调用,然后从成功回调中获取对象数据。此操作无需查看。 现在接收到对象数据后,在 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 的逻辑,然后调用索引。 【参考方案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 方法中获取参数中的数据

【讨论】:

以上是关于如何在 ASP.Net MVC 5 中调用嵌套 ajax 调用并将对象数据发送到控制器的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 如何从嵌套对象的视图模型集合中动态创建表结构

如何使用 ASP.NET MVC 在 Kendo UI Grid 中实现 N 级嵌套层次结构

ASP.NET MVC中能否嵌套WEB控件页面使用?

在 asp.net core 5 MVC 视图中从 C# 代码调用 JavaScript 函数

Asp.net中WebForm 与 MVC的架构区别

如何在 ASP.NET MVC 5 和 WEB API 2 中实现 oauth2 服务器 [关闭]