C# Asp.NETMVC-如何为ChildAction保存ModelState?

C# Asp.NETMVC-如何为ChildAction保存ModelState?,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我有一个行动后,通常有这样的代码 if (!ModelState.IsValid) { return View("Edit", viewModel); } 在编辑视图中,我调用生成PartialView的操作 @Html.Action("GetFields","Field", new {Id = Model.Id}) 我的行动 [ChildActionOnly] public ActionResult GetFields(int? Id) { ... } 此操作中的ModelSta

我有一个行动后,通常有这样的代码

if (!ModelState.IsValid)
{
    return View("Edit", viewModel);
}
在编辑视图中,我调用生成PartialView的操作

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

[ChildActionOnly]
public ActionResult GetFields(int? Id)
{
...
}
此操作中的
ModelState
是新操作,它与post操作中的
ModelState
不同

在动作和他的子动作之间是否有存储
ModelState
的方法

(我知道我可以使用
TempData
(目前我在项目中使用它)等等来存储此信息,我想知道是否存在其他方法,我的意思是框架是否包括现成的解决方案或通过字段访问的机会)

更新


ControllerContext.ParentActionViewContext.ViewData.ModelState返回post操作的ModelState

看起来不复制是不可能的

我可以用这个访问ModelState

this.ControllerContext.ParentActionViewContext.ViewData.ModelState;
对象
ViewData
包含很多来自父操作的内容,但是ModelState呢

它包含新的ModelState。它甚至没有setter。来源

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

 public ModelStateDictionary ModelState
 {
     get { return _modelState; }
 }
公共类ViewDataDictionary:IDictionary
{
私有只读ModelStateDictionary _modelState=new ModelStateDictionary();
公共模型状态字典模型状态
{
获取{return\u modelState;}
}

其他字段,如Model、ModelMetadata等,使用父控制器的值进行设置,因为ModelState在构造函数中仅为该操作创建键值对,该操作使用该键值对,而不是从父控制器创建键值对。

我只能访问ControllerContext.ParentActionViewContext。有了它,我感觉您正在尝试做一些与框架不是用来做的。为什么你需要部分地访问
ModelState
?你不能将所需的数据传递到子操作中吗?我不想访问它,我希望为PartialView显示验证消息,看起来,我必须通过另一种方式传递数据,然后将其添加到子操作的ModelState。你确定吗只有通过这种方式才有可能?不,不确定你是否能做你想做的事。但我确信会有另一种可能更简单的方式来获得同样的结果。也许如果你告诉我们你为什么希望发生这种情况,人们将能够建议其他方式来获得所需的结果。@trailmax,对我来说最简单的方式是使用临时数据,目前我在项目中使用它,但如果框架允许在没有额外代码的情况下使用它,我想知道它。感谢您的关注:)