gpt4 book ai didi

c# - mvc 3 嵌套对象绑定(bind)

转载 作者:行者123 更新时间:2023-11-30 18:04:23 25 4
gpt4 key购买 nike

我是 MVC 3 的新手,所以这可能很简单。我有一个带有嵌套对象的 View 模型:

 public class EventViewModel
{
public Event Event { get; set; }
}

public class Event
{
[Required]
public int Id { get; set; }

public string Title { get; set; }
}

在我的“创建” View 中,我做了这样的事情:

@model EventViewModel
@Html.EditorFor(model => model.Event.Title)

这是我的事件 Controller 的代码:

public class EventController : Controller
{

[HttpPost]
public ActionResult Create(EventViewModel @event)
{
...
}
}

此编辑器位于表单标签内。当我回发到我的 Controller 时,事件的标题为空,而不是我在表单中输入的内容。我需要某种自定义 Binder 吗?当我在我的 View 模型中使用嵌套对象时,我是否在做一些非常规的事情?

最佳答案

这是您的参数名称。将它从 @event 更改为 eventViewModel。似乎模型 Binder 不能那样绑定(bind)它。可能它与模型上的 Event 属性混淆了。

public ActionResult Create(EventViewModel eventViewModel) {..}

编辑:一些更粗略的解释。

HtmlHelper 创建一个名为 Event.Title 的表单输入,当您在帖子上进行绑定(bind)时, Binder 将首先尝试将 Event.Title 绑定(bind)到名为 event 的参数,绑定(bind)到名为 Title 的属性。由于 EventViewModel 上没有这样的属性,因此这将为 null。您可以通过将参数类型从 EventViewModel 更改为 Event(它有一个名为 Title 的属性)来测试它,在这种情况下,绑定(bind)不会为 null。

相反,如果参数被命名为其他名称,它将尝试通过首先查找名为 Event 的属性,然后查找 Title 来将其绑定(bind)到该参数。

关于c# - mvc 3 嵌套对象绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6214530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com