Asp.Net MVC - 如何为ChildAction保存ModelState?

时间:2014-01-14 21:46:18

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

我有帖子,有像

这样的常用代码
if (!ModelState.IsValid)
{
    return View("Edit", viewModel);
}

在编辑视图中我调用生成PartialView的Action

@Html.Action("GetFields","Field", new {Id = Model.Id})

我的行动

[ChildActionOnly]
public ActionResult GetFields(int? Id)
{
...
}

在此操作中ModelState是新的,与后期操作中的ModelState不同

有没有办法在行动和他的孩子行动之间存储ModelState

(我知道我可以使用TempData(目前我在项目中使用它)等存储此信息,我想知道是否存在另一种方式,我的意思是,如果框架包含现成的解决方案或机会通过字段访问)

更新

ControllerContext.ParentActionViewContext.ViewData.ModelState返回用于后期操作的ModelState

1 个答案:

答案 0 :(得分:2)

看起来没有复制就无法做到。

我可以使用它来访问ModelState,

this.ControllerContext.ParentActionViewContext.ViewData.ModelState;

对象ViewData包含很多来自父操作的内容,但是ModelState呢?

它包含新的ModelState。它甚至没有二传手。来自消息来源

 public class ViewDataDictionary : IDictionary<string, object>
 {
    private readonly ModelStateDictionary _modelState = new ModelStateDictionary();

 public ModelStateDictionary ModelState
 {
     get { return _modelState; }
 }

其他字段(如Model,ModelMetadata等)使用来自父控制器的值进行设置,因为ModelState仅在此操作中为constructo创建键值对,使用它而不是来自父级。