![](/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.