自定义 ViewModel 不显示 TextBoxFor TextBoxFor(Model => Model.Object1.Name) 中的值

发布于 2024-10-31 05:23:27 字数 252 浏览 0 评论 0原文

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

<%: Model.Object1.Name %>数据显示正确 <%: Html.TextBoxFor(model => model.Object1.Name) %>不显示任何数据。

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

任何信息都非常感谢。

I have a custom Model, which contains another custom object (Objects1.Object2), I am correctly populating the object prior to display in the view and

<%: Model.Object1.Name %> displays the data correctly yet
<%: Html.TextBoxFor(model => model.Object1.Name) %> displays no data.

I am new to MVC and would love to get around this issue as it is a stopping point to creating custom data model.

Any info is greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

魄砕の薆 2024-11-07 05:23:27

您是否尝试在 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);
}

然后在view:

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

应该显示正确的值。

Are you trying to modify this in a POST action? If you are then note that HTML helpers such as TextBoxFor will first read data from model state and after this from the model. So if your post action looks like this:

[HttpPost]
public ActionResult Index(SomeViewModel model)
{
    model.Object1.Name = "some new value";
    return View(model);
}

you need to remove it from model state or you will always get old value:

[HttpPost]
public ActionResult Index(SomeViewModel model)
{
    ModelState.Remove("Object1.Name");
    model.Object1.Name = "some new value";
    return View(model);
}

If you are doing this in the GET action there shouldn't be absolutely any problems displaying the value:

public ActionResult Index()
{
    var model = new SomeViewModel
    {
        Object1 = new TypeOfObject1
        {
            Name = "foo bar"
        }
    };
    return View(model);
}

and then in the view:

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

should display the proper value.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文