如何在 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 级嵌套层次结构