Asp.net 自定义ViewModel未在TextBoxFor TextBoxFor中显示值(Model=>;Model.Object1.Name)

Asp.net 自定义ViewModel未在TextBoxFor TextBoxFor中显示值(Model=>;Model.Object1.Name),asp.net,asp.net-mvc-2,Asp.net,Asp.net Mvc 2,我有一个自定义模型,其中包含另一个自定义对象(Objects1.Object2),在显示在视图中之前,我正在正确填充该对象,并且 是否正确显示数据 model.Object1.Name)%>不显示任何数据 我是MVC新手,很想避开这个问题,因为它是创建自定义数据模型的一个停止点 非常感谢您提供任何信息。您是否试图在POST操作中修改此信息?如果是,请注意,HTML帮助程序(如TextBoxFor)将首先从模型状态读取数据,然后从模型状态读取数据。因此,如果您的后期操作如下所示: [HttpPos

我有一个自定义模型,其中包含另一个自定义对象(Objects1.Object2),在显示在视图中之前,我正在正确填充该对象,并且

是否正确显示数据 model.Object1.Name)%>不显示任何数据

我是MVC新手,很想避开这个问题,因为它是创建自定义数据模型的一个停止点


非常感谢您提供任何信息。

您是否试图在POST操作中修改此信息?如果是,请注意,HTML帮助程序(如
TextBoxFor
)将首先从模型状态读取数据,然后从模型状态读取数据。因此,如果您的后期操作如下所示:

[HttpPost]
public ActionResult Index(SomeViewModel model)
{
    model.Object1.Name = "some new value";
    return View(model);
}
您需要将其从模型状态中删除,否则将始终获得旧值:

[HttpPost]
public ActionResult Index(SomeViewModel model)
{
    ModelState.Remove("Object1.Name");
    model.Object1.Name = "some new value";
    return View(model);
}
如果在GET操作中执行此操作,则显示值时绝对不会出现任何问题:

public ActionResult Index()
{
    var model = new SomeViewModel
    {
        Object1 = new TypeOfObject1
        {
            Name = "foo bar"
        }
    };
    return View(model);
}
然后在视图中:

<%= Html.TextBoxFor(x => x.Object1.Name) %>
x.Object1.Name)%%>

应显示正确的值。

这是一个简单的获取,唯一不同的是我有一个父视图,其中有两个嵌套视图(RenderPartial(“view”,Model),但文本框中仍然没有数据,因为我在a中有相同的数据。不确定嵌套视图是否导致了问题。感谢againDarin,你是正确的(从ModelState中删除项)。添加ModelState.Clear();更正了问题。我想知道您是否可以给我一些细节/链接来解释这一点,因为我在印象中添加了一个新对象以查看(newobject)将清除原始状态。谢谢!@user701236,ModelState可以由GET/POST请求参数自动填充,因此如果您尝试修改此词典中已存在的模型值,HTML帮助程序仍将使用旧值,这是出于设计。