Asp.net mvc 4 如何在MVC4(空模型)中发布此模型

Asp.net mvc 4 如何在MVC4(空模型)中发布此模型,asp.net-mvc-4,model,http-post,nul,Asp.net Mvc 4,Model,Http Post,Nul,我的问题很常见,但我自己似乎无法解释为什么在发布模型时它是空的。我的FormCollection似乎表明它不了解它发布的整个模型。见下面的代码: 我的模型-CaseForm.cs namespace Models.CaseForm { public class CaseForm { public CaseForm() { this.Person = new Person(); this.Case =

我的问题很常见,但我自己似乎无法解释为什么在发布模型时它是空的。我的FormCollection似乎表明它不了解它发布的整个模型。见下面的代码:

我的模型-CaseForm.cs

namespace Models.CaseForm
{
    public class CaseForm
    {
        public CaseForm()
        {
            this.Person = new Person();
            this.Case = new Case();
            this.Cases = new List<Case>();
        }

        public string strMessage;
        public bool isValidModel;

        public Person Person = new Person();
        public Case Case = new Case();
        public List<Case> Cases = new List<Case>();
    }
}
我的FormCollection

在我的表单集合中,它只解释case对象,它应该显示:

  • 短信
  • isValidModel
  • 案例obj
  • 案例收集
  • 个人目标

为什么这个模型发布不正确?

您的属性需要getter和setter。
DefaultModelBinder
创建了
CaseForm
的一个新实例,但是可以设置其属性的值,因为这些属性没有setter

public class CaseForm
{
  public string strMessage { get; set; }
  public bool isValidModel { get; set; }
  ....
  public List<Case> Cases { get; set; }
}
然后为同一属性创建一个文本框

@Html.TextBoxFor(m => m.Case.CaseRef)

您需要删除
HiddenFor
,因为它只会在回发时绑定第一个值(隐藏输入中的值),而忽略第二个值(文本框中的值)

谢谢!我没有意识到我忘记了模型中那些对象的get/set。
public class CaseForm
{
  public string strMessage { get; set; }
  public bool isValidModel { get; set; }
  ....
  public List<Case> Cases { get; set; }
}
 @Html.HiddenFor(m => m.Case.CaseRef)
@Html.TextBoxFor(m => m.Case.CaseRef)