首页 文章

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

提问于
浏览
0

我在控制器中有两个动作方法 . 在第一个动作方法的帮助下,我从数据库中获取所需的数据,我需要在第二个动作方法中获取这个获取的数据 . 我需要在不将任何参数传递给第二个方法的情况下实现此目的 . 我不知道如何做到这一点,因为我是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

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

    Session["data"] = lst
    

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

    var data = (List<DataVM>)Session["data"]
    

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

  • 0

    您也可以使用TempData

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

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

    var getdatafromanotherAction= TempData["Name of Tempdata variable"]
    
  • -1

    如果要在单个调用中调用两个操作方法,可以在第一个方法中使用返回RedirectToAction(“GetInvalidRecords”) . 此外,您可以创建一个类级私有变量_listdata . 在第一种方法中设置它,进入第二种方法 .

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

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

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

相关问题