从一个动作方法获取值到同一控制器内的其他动作方法

时间:2017-08-09 12:48:13

标签: c# asp.net-mvc

我在控制器中有两个动作方法。在第一个操作方法的帮助下,我从数据库中获取所需的数据,我需要在第二个操作方法中获取这个获取的数据。我需要在不将任何参数传递给第二个方法的情况下实现此目的。我不知道怎么做,因为我是MVC的新手。

方法1:

public ActionResult GetData(HttpPostedFileBase file)
{
    string folderPath = Server.MapPath(ConfigurationManager.AppSettings["BackupPath"]);
    List<string> invalidRecords = new List<string>();
    string backupFileName = FileUpload.BackupFile(file, folderPath);
    invalidRecords = File.GetDataFromDB(backupFileName);
    List<DataVM> lst = serviceData.GetAllData();
    return View(lst);
}

方法2:

[HttpPost]
public JsonResult GetInvalidRecords()
{
    List<string> InvalidVehicleId = InvalidRecords;
    return new JsonResult { Data = InvalidRecords };
}

3 个答案:

答案 0 :(得分:0)

您可以使用会话变量来保存“GetData”操作中'lst'变量的值:

enc(X)

然后您可以按如下方式检索它并将其转换为适当的类型:

Session["data"] = lst

https://msdn.microsoft.com/en-us/library/ms178581.aspx

答案 1 :(得分:0)

您也可以使用TempData

TempData["Name of Tempdata variable "]= File.GetDataFromDB(backupFileName)

在其他行动中你可以收到它

var getdatafromanotherAction= TempData["Name of Tempdata variable"]

答案 2 :(得分:-1)

如果要在单个呼叫中同时调用两种操作方法,可以使用 在第一个方法中返回RedirectToAction(&#34; GetInvalidRecords&#34;)。此外,您可以创建一个类级私有变量_listdata。在第一种方法中设置它,进入第二种方法。

如果要在两次调用之间保留数据,请使用Tempdata.Keep和Tempdata.Peek,但是您需要确保第二种方法的调用紧跟第一种方法。 Tempdata仅在2个请求之间工作,除非您通过再次使用.Keep和.Peek延长其持续时间。

如果要将这两种方法分开调用,则可以使用会话变量来保存数据。

或者,您可以将第二个方法调用的参数保持为可选。因此,它不会伤害jsonresult方法的其他调用。在方法内部,您可以检查参数是否为空。