![](/img/trans.png)
[英]How to call controller method from asp.net mvc Login Form using Ajax before submit
[英]How to call controller method and pass the object from ajax call in ASP.Net MVC
我正在学习过程中,正在研究ASP.net MVC 5项目。 因此,我有一个模型视图,其中包含其他模型视图。
父模型视图
public class FullConfigMV
{
some properties here
public ElementStyleMV Page { get; set; }
}
现在,下面是我要实现的目标。
拨打ajax电话
一旦ajax调用命中控制器功能,请设置一些值
现在从那里,我需要将该对象传递给另一个控制器操作,它将返回它的视图。
第1步。
<script>
$(document).ready(function()
{
$("#tan").change(function()
{
alert(this.value);
$.ajax({
type: 'POST',
url: '/Settings/GetAvailableLocationsFor',
data: { accountId: 28462, groupId: 35},
success: function (data) {
//Whatever
},
error: function () {
DisplayError('Failed to load the data.');
}
});
});
});
</script>
步骤1之后,我的断点达到
public ActionResult GetAvailableLocationsFor(int accountId, int groupId)
{
FullConfigMV configData = SetLoader.GetDSettings(accountId, groupId);
Utils.SiteCss = configData.CssStyles();
// NOW AT THIS PLACE I WANT TO CALL ANOTHER CONTROLLER FUNCTION
// AND PASS THE `configData Obj`
return View();
}
我知道我们有类似的东西
return RedirectToAction("Index","Home");
但是如何通过config Obj
我要调用的控制器函数在Home Controller
,并且动作名称为Index
public ActionResult Index(FullConfigMV data)
{
return View();
}
如果要求看起来很怪异,那么请对此感到不满意。
编辑
解决方案建议“使用TempData
”后,但问题是我的控制器中有两个索引动作。 我希望SECOND
Index Action受到打击。 但是第一个受到打击。
第一:
public ActionResult Index()
{
}
第二
[HttpPost]
public ActionResult Index(FullConfigMV data)
{
}
使用的代码是
public ActionResult GetAvailableLocationsFor(int accountId, int groupId)
{
FullConfigMV configData = SetLoader.GetDSettings(accountId, groupId);
SimUtils.SiteCss = configData.CssStyles();
TempData["config"] = configData;
return RedirectToAction("Index", "Home");
}
您可以使用TempData实现。 来自https://msdn.microsoft.com/zh-cn/library/system.web.mvc.tempdatadictionary(v=vs.118).aspx :
“ TempDataDictionary对象的典型用法是当它重定向到另一个动作方法时,从动作方法传递数据。”
有很多文档,但只需使用
TempData["config"] = configData;
在您的第一个动作结果中,然后使用
var configData = TempData["config"] as FullConfigMV;
我不是100%的人,但是您可以将其作为路由传递。如果没有,请使用TempData
。
例:
public ActionResult GetAvailableLocationsFor(int accountId, int groupId)
{
FullConfigMV configData = SetLoader.GetDSettings(accountId, groupId);
Utils.SiteCss = configData.CssStyles();
return RedirectToAction("Index","Home", new { data = configData});
}
或者,如果上述方法不起作用:
public ActionResult GetAvailableLocationsFor(int accountId, int groupId)
{
FullConfigMV configData = SetLoader.GetDSettings(accountId, groupId);
Utils.SiteCss = configData.CssStyles();
TempData["config"] = configData;
return RedirectToAction("Index","Home");
}
// Index ActionResult
public ActionResult Index()
{
if (TempData["config"] != null)
{
FullConfigMV variableName = (FullConfigMV)TempData["config"];
...
return View(/*whatever you want here*/);
}
return View();
}
让我知道是否有帮助
对于您的问题, 在解决方案建议“使用TempData”之后,但是问题是我的控制器中有两个索引动作。 我希望SECOND Index Action受到打击。 但是第一个命中方法是基于可以在TempData中设置的某些数据,您可以从第一个索引方法调用return Index(data)
,可以通过Tempdata或其他变量获取数据 。 这将通过第一个索引方法调用第二个索引方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.