在操作之间传递时,ViewModel变为null

时间:2014-10-10 15:56:10

标签: c# asp.net-mvc-4

我无法将视图模型传递到视图中。我有两种观看:Search视图和GeneralForm视图。 Search将搜索结果传递到GeneralForm的viewmodel。

假设GeneralForm是一个包含两个其他视图模型的复杂视图模型:

public class GeneralFormViewModel
{
    public GeneralInfoViewModel GeneralInfo { get; set; }
    public NotesViewModel Notes { get; set; }
}

public class GeneralInfoViewModel
{
    [Required(ErrorMessage = "Please enter the person's name.")]
    [DisplayName("Name:")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Please enter the person's ID.")]
    [DisplayName("ID:")]
    public int ID { get; set; }
}

public class NotesViewModel
{    // etc.

(我设置这种方式是为了在我的GeneralForm视图中使用多个@Html.BeginForm。这样,我希望使用KnockoutJS一次一个地POST和验证整个一般表单的小部分和AJAX。)

  [HttpPost]
  public ActionResult Search(SearchViewModel vm)
  {
    var query = // do some searching

    var viewmodel = new GeneralFormViewModel()
    {
        GeneralInfo = new GeneralInformationViewModel
        {
            ID = query.id,
            Name = query.name
        }
    };

    return RedirectToAction("GeneralForm", viewmodel);
 }

此时,viewmodel.GeneralInfo 不是 null,并且viewmodel将传递给GeneralForm控制器。

    [HttpGet]
    public ActionResult GeneralForm(GeneralFormViewModel model)
    {
        return View(model);
    }

现在model.GeneralInfo 为空。我通过这样做打破了MVC的哪些约定,如何让GeneralForm视图将通过Search控制器获取的数据呈现给GeneralForm视图?

1 个答案:

答案 0 :(得分:2)

问题是您无法使用RedirectAction发送数据。

您正在进行301重定向,然后返回客户端。

将其存储在TempData或Session ...

请参阅以下帖子: passing model and parameter with RedirectToAction