簡體   English   中英

如何在ASP.Net MVC中調用控制器方法並從Ajax調用傳遞對象

[英]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; }
}

現在,下面是我要實現的目標。

  1. 撥打ajax電話

  2. 一旦ajax調用命中控制器功能,請設置一些值

  3. 現在從那里,我需要將該對象傳遞給另一個控制器操作,它將返回它的視圖。

第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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM