【问题标题】:How to send one value after successful ajax post request to a page redirectajax post请求成功后如何发送一个值到页面重定向
【发布时间】:2017-12-27 14:51:42
【问题描述】:

我正在学习 ASP.net MVC - 5,但遇到了一个问题。所以我需要在成功的 Ajax 发布请求后打开一个 URL。但我也想将一个值传递给新 URL 的控制器操作。以下是我到目前为止所拥有的。

AJAX 调用

 $.ajax({
        url: URL,
        type: 'POST',
        data: data,

        success: function (result) {
            if (result == true) {
            int TEMPVAR = 2;
            DisplayError('Save Successful', 'Success', function () { 
            window.location.href = '/Settings/Customize/'; });
            },
            error: function (error) {
        }
    });

控制器动作

  [AuthorizeSettings]
  public ActionResult Customize()
  {
     //I want to be able to access TEMPVAR value here
     // code removed for brevity
     return View(configData);
  }

问题:如何将TEMPVAR data传递给Customize Action

积分:

我知道有一些方法可以传递数据。 TempData、Viewbag、SessionVariable、在 URL 请求中嵌入 TEMP 值、匿名对象、ViewData、类的静态变量、全局变量、JSON。但我完全困惑如何传递数据。我是新手,请在这里指导我。

编辑:

AJAX 调用

 $.ajax({
        url: URL,
        type: 'POST',
        data: data,

        success: function (result) {
            if (result == true) {
            int TEMPVAR = 2;
            DisplayError('Save Successful', 'Success', function () { 
            window.location.href = '/Settings/Customize/'; });
             TEMPDATA["value"] = TEMPVAR;
            },
            error: function (error) {
        }
    });

【问题讨论】:

  • 你应该可以访问TempData,如果它已经被访问过的话。
  • @Win: 你的意思是说我需要将 TEMPVAR 数据设置成 TEMPData[]
  • 我有一个变量,比如说 TEMPVAR,我需要在 POST 请求成功后将其传递给自定义控制器操作。
  • 是的,您需要将数据设置为 TempData["SomeName"]。然后您可以稍后检索。
  • @Win 非常感谢!你能看看我的编辑吗?

标签: c# ajax asp.net-mvc post asp.net-mvc-5


【解决方案1】:

基于 cmets,您希望将数据从 SaveStyles 发送到 Customize。如果是这样,您可以使用TempData -

public class PersistController : Controller
{
    [HttpPost]
    public ActionResult SaveStyles()
    {
        TempData["Status"] = true;
        TempData["Val"] = 4;
        return Json(true);
    }
}

public class SettingsController : Controller
{
    public ActionResult Customize()
    {
        bool status = Convert.ToBoolean(TempData["Status"]);
        int val = Convert.ToInt32(TempData["Val"]);
        return View();
    }
}

【讨论】:

  • 因为只有你们,像我这样的初学者才有信心在他们的职业生涯中前进。它完美无缺。我以前使用过 TempData 但我在两个控制器操作之间直接交互时使用过它。从来没有通过ajax和所有这样的方式想到它。看到这个答案后,一切都说得通了。由于临时数据更像是基于并发调用。它不关心它是通过 ajax 还是“重定向”。
  • 只是一点点。我看到很多答案,用户正在对 ajax post 方法的成功结果进行一些修改。哪个是更好的方法。我应该遵循临时数据方法还是尝试修改 ajax 发布请求。请指导。
  • 所以基本上你不希望我在这里修改任何东西。 success: function (result) { if (result == true) { int TEMPVAR = 2; DisplayError('Save Successful', 'Success', function () { window.location.href = '/Settings/Customize/'; }); }, error: function (error) { }
  • 如果你在页面之间传递敏感数据,你肯定想要使用TempData。否则,您可以使用 Ajax Post 方法返回的数据,并将其传递给 Customize 方法。
猜你喜欢
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多