返回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();
}
}
}
Per-msdn RedirectToAction
将导致对Review
操作的另一个get请求。
返回HTTP 302响应浏览器,使浏览器向指定的发出GET请求行动
这会导致wizard
对象的值松动,需要重新填充。
View()
简单地返回与当前上下文中的该动作相关联的视图。
如果可能的话,您可以将向导放置在TempData
、return View("Review", wizard)
中,或者将wizard
作为路由值传递。
RedirectToAction向浏览器返回HTTP 302响应,这会导致浏览器对指定的操作发出GET请求。所以你不能像那样传递复杂的对象
这不是最好的解决方案,但尝试在ViewData:中重定向之前放置向导对象
ViewData["wizard"] = wizard
然后在Review((中获取
var wizard = (Wizard)ViewData["wizard"];
return RedirectToAction("Review",向导(;将向导对象传递给名为"审阅"的视图。审阅需要是基于与向导相同类的强类型视图。
如果这不能回答你的问题,那么发布你的视图代码会很有帮助。