mvc 3嵌套对象绑定
我对MVC 3很新,所以这可能是一个简单的问题。我有这样一个嵌套的对象视图模型:mvc 3嵌套对象绑定
public class EventViewModel
{
public Event Event { get; set; }
}
public class Event
{
[Required]
public int Id { get; set; }
public string Title { get; set; }
}
在我的“创造”鉴于我做这样的事情:
@model EventViewModel
@Html.EditorFor(model => model.Event.Title)
下面的代码构成了我事件控制器:
public class EventController : Controller
{
[HttpPost]
public ActionResult Create(EventViewModel @event)
{
...
}
}
此编辑器位于表单标签内。当我回复我的控制器时,事件的标题为空,而不是我在表单中输入的内容。我需要某种自定义联编程序吗?当我在viewmodel中使用嵌套对象时,我在做非常规的事情吗?
这是你的参数的名称。将其从@event更改为eventViewModel。看起来像模型联编程序不能像这样绑定它。可能它会与模型上的Event属性混淆在一起。
public ActionResult Create(EventViewModel eventViewModel) {..}
编辑:一些更粗略的解释。
HtmlHelper使用名称Event.Title创建表单输入,并且当您在帖子上进行绑定时,活页夹将首先尝试将Event.Title绑定到名为event的参数,并将其绑定到名为Title的属性。由于EventViewModel上没有这样的属性,它将为空。您可以通过将参数类型从EventViewModel更改为Event(具有名为Title的属性)来查看测试,在这种情况下,绑定不会为空。
相反,如果该参数被命名为别的东西,它会尝试通过首先查找名为Event的属性,然后查找Title来将其绑定到该参数。
感谢您的解释! – Gluip 2011-06-02 13:19:14
不用担心,我遇到了我与模型绑定的问题。它值得多读一点关于它如何在幕后工作.. http://*.com/questions/5692964/asp-net- MVC-3模型结合资源 – 2011-06-02 13:21:22
哦对。当您第一次请求页面时,即您的默认操作,您需要实例化ViewModel并将其传递给视图。
public ActionResult DefaultActionForEventView()
{
var eventViewModel = new EventViewModel();
eventViewModel.Event = new Event() // I can't remember if you need this line
return View(eventViewModel)
}
让我知道上面的行。
我不认为这是问题。 – 2011-06-02 12:38:45
这确实不会影响。如果有这样的事情,但模型没有发回 – Gluip 2011-06-02 12:44:29
更改我的嵌套类TheEvent名固定的问题不知何故......这是我的视图模型看起来像现在..
public class EventViewModel
{
public Event TheEvent { get; set; }
}
是的,这也可以。..看看我的解释。在这种情况下,生成的输入名称将是TheEvent.Title,而不是.. – 2011-06-02 13:12:46
这是一个幸运的修复...生病与您的解决方案。 – Gluip 2011-06-02 13:20:08
您可以发布操作方法的代码吗?控制器操作中的参数是否为'EventViewModel'类型?如果不是,那将是原因。 – 2011-06-02 12:36:47
[模型绑定的asp.net mvc嵌套属性]的可能的重复(http://*.com/questions/594412/model-binding-of-nested-properties-in-asp-net-mvc) – Lucero 2011-06-02 12:37:37
我可以不知道什么是错的。你没有做任何非常规的事情,你不应该为此需要一个自定义绑定器。 – 2011-06-02 12:45:11