我无法将视图模型传递到视图中。我有两种观看: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视图?
答案 0 :(得分:2)
问题是您无法使用RedirectAction发送数据。
您正在进行301重定向,然后返回客户端。
将其存储在TempData或Session ...
中