当使用RedirectToAction时,它不保留我的模型

本文关键字:保留 我的 模型 RedirectToAction | 更新日期: 2023-09-27 17:50:58

当我捕获HttpPost时,我正在重定向到另一个ResultAction。它保留了整型值,而不是列表值。我不知道为什么。如果我得到页码= 2的帖子,searchAction = 3, clearanceResults(一个列表)有25个项目。它回来与我所期望的帖子,但是当我得到的细节ActionResult,它只保留pageNumber和searchAction,而不是clearanceResults的列表。奇怪的是,这个列表不是空的,它只是计数为0。

模型:

public class ClearanceListViewModel
{
    public ClearanceListViewModel()
    {
        this.pageNumber = 1;
        this.searchAction = 1;
        this.lastPage = false;
    }
    public ClearanceListViewModel(int pageNumber, int searchAction)
    {
        this.pageNumber = pageNumber;
        this.searchAction = searchAction;            
    }
    public int pageNumber { get; set; }
    public int searchAction { get; set; }
    public List<ClearanceViewModel> clearanceResults { get; set; }
    public bool lastPage { get; set; }
}

Post in controller:

    [HttpPost]
    public ActionResult Details(ClearanceListViewModel model, FormCollection collection)
    {
        ClearanceListViewModel cModel = new ClearanceListViewModel();
        cModel = model;
        cModel.clearanceResults = model.clearanceResults;
        // do something
        return RedirectToAction("Details", cModel);
    }

动作控制器结果:

public ActionResult Details(ClearanceListViewModel model)
    {
        DataTable dt = new DataTable();
        List<ClearanceViewModel> clearanceList = new List<ClearanceViewModel>();
        //save any changes
        if (model.clearanceResults != null)
        {
            ClearanceSave(model);
            model.clearanceResults = null;
        }
        string inQuery = "select sku, qty from products";
        // call the query
        dt = AS400DAL.Instance.ExecuteQueryAsDataTable(inQuery);
        model = Utility.Utility.ProcessClearanceSkus(dt, model);
        return View("Index",model);
    }

任何输入将是感激的。

谢谢!

当使用RedirectToAction时,它不保留我的模型

研究RedirectToAction的过载。没有一个允许传递模型。通常,您的帖子将修改数据库,然后您将重定向到从数据库重新创建模型的操作。因为重定向是在客户端发生的事情,所以重定向的请求与发出重定向的post完全分开,所以模型不会被持久化。

使用会话来存储模型,

你可以这样做:

Session["mymodel"] = model;

然后在重定向之后通过

从会话中获取模型
ClearanceListViewModel newModel = (ClearanceListViewModel)Session["mymodel"];

这将允许您成功地传递模型

相关文章: