mvc 3嵌套对象绑定

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中使用嵌套对象时,我在做非常规的事情吗?

+0

您可以发布操作方法的代码吗?控制器操作中的参数是否为'EventViewModel'类型?如果不是,那将是原因。 – 2011-06-02 12:36:47

+0

[模型绑定的asp.net mvc嵌套属性]的可能的重复(http://*.com/questions/594412/model-binding-of-nested-properties-in-asp-net-mvc) – Lucero 2011-06-02 12:37:37

+0

我可以不知道什么是错的。你没有做任何非常规的事情,你不应该为此需要一个自定义绑定器。 – 2011-06-02 12:45:11

这是你的参数的名称。将其从@event更改为eventViewModel。看起来像模型联编程序不能像这样绑定它。可能它会与模型上的Event属性混淆在一起。

public ActionResult Create(EventViewModel eventViewModel) {..} 

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

HtmlHelper使用名称Event.Title创建表单输入,并且当您在帖子上进行绑定时,活页夹将首先尝试将Event.Title绑定到名为event的参数,并将其绑定到名为Title的属性。由于EventViewModel上没有这样的属性,它将为空。您可以通过将参数类型从EventViewModel更改为Event(具有名为Title的属性)来查看测试,在这种情况下,绑定不会为空。

相反,如果该参数被命名为别的东西,它会尝试通过首先查找名为Event的属性,然后查找Title来将其绑定到该参数。

+0

感谢您的解释! – Gluip 2011-06-02 13:19:14

+0

不用担心,我遇到了我与模型绑定的问题。它值得多读一点关于它如何在幕后工作.. 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) 
} 

让我知道上面的行。

+0

我不认为这是问题。 – 2011-06-02 12:38:45

+0

这确实不会影响。如果有这样的事情,但模型没有发回 – Gluip 2011-06-02 12:44:29

更改我的嵌套类TheEvent名固定的问题不知何故......这是我的视图模型看起来像现在..

public class EventViewModel 
{  
    public Event TheEvent { get; set; } 
} 
+0

是的,这也可以。..看看我的解释。在这种情况下,生成的输入名称将是TheEvent.Title,而不是.. – 2011-06-02 13:12:46

+0

这是一个幸运的修复...生病与您的解决方案。 – Gluip 2011-06-02 13:20:08