【问题标题】:How to pass class via RedirectToAction如何通过 RedirectToAction 传递课程
【发布时间】:2012-02-21 09:45:31
【问题描述】:

我有以下代码:

    public ActionResult Index()
    {
        AdminPreRegUploadModel model = new AdminPreRegUploadModel()
        {
            SuccessCount = successAddedCount,
            FailureCount = failedAddedCount,
            AddedFailure = addedFailure,
            AddedSuccess = addedSuccess
        };
        return RedirectToAction("PreRegExceUpload", new { model = model });
    }

    public ActionResult PreRegExceUpload(AdminPreRegUploadModel model)
    {
        return View(model);
    }

但是当我在 PreRegExcelUpload 上断点时模型为空。为什么?

【问题讨论】:

    标签: asp.net-mvc-3 redirecttoaction


    【解决方案1】:

    我建议不要在 Evgeny Levin 的回答中使用 Session 对象,而是使用 TempData。请参阅http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications 关于TempData

    您也可以通过在 Index 函数中调用 return PreRegExceUpload(model); 而不是 return RedirectToAction(..) 来解决此问题。

    【讨论】:

      【解决方案2】:

      TempData 只是 Session 的“智能”包装器,在底层它仍然以相同的方式运行。

      由于它只有 4 个字段,我将通过查询字符串传递它们。

      在可能的情况下,始终尽量避免使用 session/tempdata,在这种情况下肯定是这样。

      您确定这是您的完整代码吗?因为它没有意义。

      如果您发布一些数据并将其保存到数据库(例如),通常您重定向到另一个传递唯一标识符(通常在保存后生成)的操作,从数据库中取回并返回查看。

      这是更好的做法。

      如果您再解释一下您的场景,并展示您使用的正确代码,我可以提供进一步的帮助。

      【讨论】:

        【解决方案3】:

        使用会话将模型传递给方法:

        public ActionResult Index()
        {
            AdminPreRegUploadModel model = new AdminPreRegUploadModel()
            {
                SuccessCount = successAddedCount,
                FailureCount = failedAddedCount,
                AddedFailure = addedFailure,
                AddedSuccess = addedSuccess
            };
            Session["someKey"] = model;
            return RedirectToAction("PreRegExceUpload");
        }
        
        public ActionResult PreRegExceUpload()
        {
            var model = (AdminPreRegUploadModel) Session["someKey"];
            Session["someKey"] = null;
            return View(model);
        }
        

        方法RedirectToAction()不能把非原始类型作为参数,因为url参数是字符串。

        【讨论】:

        • 使用 Session 在方法之间传递对象?那么最好使用TempData。但我想正确通过...
        猜你喜欢
        • 2010-12-29
        • 1970-01-01
        • 2012-04-28
        • 1970-01-01
        • 1970-01-01
        • 2011-09-25
        • 2021-10-20
        • 2013-10-15
        • 1970-01-01
        相关资源
        最近更新 更多