繁体   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