返回View(model)和返回RedirectToAction("ViewName",model)

本文关键字:返回 quot model ViewName View RedirectToAction | 更新日期: 2023-09-27 18:00:48

我无法获取Index((操作以将有效模型传递给Review((操作

ActionResult索引((。。。

            else
            {
                return RedirectToAction("Review", wizard); <--wizard is a valid object here....
            }

行动结果审查((

    public ActionResult Review()
    {
        return View(_wizard); <-- THis is always null.
    }

更新:这是我的整个控制器。我想把用户从向导索引带到审查页面,然后最后带到实际保存数据的传输页面。我真的很难理解最后的部分。当你习惯于asp classic,你必须从零开始显式地编写所有内容时,很难习惯MVC3中的Magic继承。所以,我打赌我写了很多非种子代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using mvc3test.Models;
using Microsoft.Web.Mvc;
using System.Web.Mvc;
using mvc3test.Services;
namespace mvc3test.Controllers
{
    public class WizardController : Controller
    {
        private WizardViewModel wizard = new WizardViewModel();
        private DR405DBContext db;
        public WizardController(IDBContext dbContext)
        {
            db = (DR405DBContext)dbContext;
        }
        public WizardController()
        {
            db = new DR405DBContext();
        }
        public ActionResult Index()
        {
            wizard.Initialize();
            return View(wizard);
        }
        [HttpPost]
        public ActionResult Index([Deserialize] WizardViewModel wizard, IStepViewModel step)
        {
            wizard.Steps[wizard.CurrentStepIndex] = step;
            if (ModelState.IsValid)
            {
                if (!string.IsNullOrEmpty(Request["next"]))
                {
                    wizard.CurrentStepIndex++;
                }
                else if (!string.IsNullOrEmpty(Request["prev"]))
                {
                    wizard.CurrentStepIndex--;
                }
                else
                {
                    return View("Review", wizard);
                }
            }
            else if (!string.IsNullOrEmpty(Request["prev"]))
            {
                wizard.CurrentStepIndex--;
            }
            return View(wizard);

        }

        [AllowAnonymous]
        public ActionResult Review(WizardViewModel model)
        {
            return View(model);
        }
        [AllowAnonymous]
        [HttpGet]
        public ActionResult Review(Int32 ID)
        {
            var service = new DR405Service(db);
            var myWizard = service.WireUpDataModelToViewModel(service.DBContext.dr405s.Single(p => p.ID == ID));
            return View(myWizard);
        }

        public ActionResult Transmit()
        {
            var service = new DR405Service(db);
            service.Wizard = wizard;
            service.Save();
            return View();
        }

    }
}

返回View(model)和返回RedirectToAction("ViewName",model)

Per-msdn RedirectToAction将导致对Review操作的另一个get请求。

返回HTTP 302响应浏览器,使浏览器向指定的发出GET请求行动

这会导致wizard对象的值松动,需要重新填充。

View()简单地返回与当前上下文中的该动作相关联的视图。

如果可能的话,您可以将向导放置在TempDatareturn View("Review", wizard)中,或者将wizard作为路由值传递。

RedirectToAction向浏览器返回HTTP 302响应,这会导致浏览器对指定的操作发出GET请求。所以你不能像那样传递复杂的对象

这不是最好的解决方案,但尝试在ViewData:中重定向之前放置向导对象

ViewData["wizard"] = wizard

然后在Review((中获取

var wizard = (Wizard)ViewData["wizard"];

return RedirectToAction("Review",向导(;将向导对象传递给名为"审阅"的视图。审阅需要是基于与向导相同类的强类型视图。

如果这不能回答你的问题,那么发布你的视图代码会很有帮助。

相关文章: