2011-09-07 58 views
4

我不明白为什么我的模型没有被填充。所有发布的数据都在Request.Form中,但该模型实际上是nullMVC发帖不填充模型

根据this answer on model with collection not populating on postback

换句话说,(...)如果任何所需的字段丢失,或者如果这些值以这样的方式使得它们不能被转换为的类型提交 那么整个对象将被留空

我已经改变了几个值类型,但我无法让它工作。

这里是我的模型:

public class AddModel 
{ 
    //Get properties 
    public Vehicle vehicle; 

    //Post properties 
    [Required(ErrorMessage = "Please enter a start date")] 
    public DateTime StartDate; 
    public int? StatusCode; 

    public SelectList StatusCodes() 
    { 
     ... 
    } 
} 

你能想到的不是被填充,为什么呢?

+0

您的观点是什么样子? –

+0

MedProduct类是什么样的?身份证是公共领域还是带有getter/setter的财产? –

+0

@Jamie,你想让我发布视图的源代码,还是只是渲染视图的截图?谢谢 – LocustHorde

回答

4

制作AddModel成员Properties - 添加get; set;到字段应该解决您的问题

+0

嗨,我没有''搞定;设置;''到其他各种模型(更新,新建,modifyWithBase等),他们都很好..我应该添加getter和setter到每个成员属性?将试用它..请问这是什么解释? – LocustHorde

+0

你在OP中有什么*字段*而不是*属性*。这也是我的第一本能。差别很小,但通常属性可以有逻辑背后的逻辑(尽管它们通常不会),而字段是原始成员变量。 'get;'和'set;'是getter和setter方法的默认实现。通常,我通常使用公共API的属性和私有数据的字段,这些私有数据不直接暴露(尽管可能通过属性)。网上可能有更正式的最佳做法。 – bambams

2

按@阿尔奇尔的回应,你应该让你的公共变量的属性。虽然这可能适用于类型,但只要增加复杂性,就会遇到问题。当然对于类,但也可能为可空类型。

模型活页夹使用反射来将表单字段分析到模型中,并且反射对公共变量的属性的工作方式不同 - 在这些模型的情况下,the differences will likely be causing the failure here

希望有帮助 - 和帽子提示@archil回答这个(可能)正确,比我快!

+0

哇,好吧它现在正在工作,我还没有准备好相信这会解决问题..通过编码恐怖帖子和其他在那里提到的博客..还有很多要学习! – LocustHorde

+0

现在我很困惑..哪个答案选择? @ archil的答案解决了问题,但你的答案帮助我理解为什么它解决了这个问题..嗯.. – LocustHorde

+3

如果@ archil的答案让你的模型工作,那么它可能只是公平的使用他的:) – Timbo