2012-01-26 49 views
2

我有从模型到传递控制器值的问题,比方说,我有两个类:ASP.NET MVC 2模型子类总是空

public class Model 
{ 
    public string Name { get; set; } 
    public SubClass Value { get; set; } 
} 
public class SubClass 
{ 
    public string Value1 { get; set; } 
    public string Value2 { get; set; } 
} 
鉴于

,我对模型的属性值分配值类型SubClass是这样的:

<%: Html.TextBoxFor(model => model.Value.Value1) %> 

<%: Html.TextBoxFor(model => model.Value.Value1) %> 

该视图传递给控制器​​只有Model的Name属性,Value属性始终保留为null。有什么建议么 ?

+2

你曾经初始化'model.Value'? –

+0

检查'Request.Params'数据是否被发送? – gdoron

回答

0

这是因为默认情况下,MVC模型绑定将无法通过(复杂的即非原始类型)的子类型回控制器在帖子上。你的财产public SubClass Value { get; set; }是一个复杂的类型(你写的一个类叫做SubClass)。

您需要为此编写一个自定义模型联编程序,以告诉MVC如何将子类发回您的模型。以下是一些关于自定义模型绑定的精彩文章,可帮助您找到需要的地方。

http://odetocode.com/Blogs/scott/archive/2009/04/27/12788.aspx

http://odetocode.com/Blogs/scott/archive/2009/05/05/12801.aspx

+4

这不是事实。不仅如此,默认模型绑定器可以处理复杂类型,也可以处理复杂类型的集合。看看这里:http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx你绝对不必为这样一个简单的场景写一个自定义模型联编程序。 –

+0

这真的太棒了!谢谢。 – aldebaran

-2

在你的控制器,你必须得到模型:

[httpost] 
public void action(Model model) 
{ 
    //get your subClass values 
    string s = model.Value.Value1;   
} 
+0

你没看过这个问题吗?这正是他所做的。只是'model.Value'在他的控制器动作中为null,他问这是为什么。 –