模型绑定时自定义对象的默认模型绑定器的行为

时间:2013-12-06 21:20:38

标签: asp.net asp.net-mvc

在下面的代码中,我的'tc'对象在发布后已初始化,但值为null。问题的根本原因是什么?为什么默认模型绑定程序不会尝试使用传入的已发布值填充属性?默认模型绑定器必须具有哪些限制?

  <form id="hello-world" action="/Home/Index">
        <label for="user">User  </label>
        <input id="user" type="text" name="user" required="required">
        <label for="city"> City </label>
        <input id="city" type="text" name="city" required="required">
        <label for="age"> Age </label>
        <input id="age" type="text" name="age" required="required">
        <input type="submit" value="Submit">
    </form>


 public ActionResult Index(TestClass tc)
   { 
     ViewBag.TCName = tc.user; // its null
     ViewBag.TCAge = tc.age; // its null
     ViewBag.TCCity = tc.city; // its null
     return View();
    }
public class TestClass
{
    public string user;
    public string city;
    public string age;
}

1 个答案:

答案 0 :(得分:2)

您应该在视图模型上使用properties而不是fields

public class TestClass
{
    public string User { get; set; }
    public string City { get; set; }
    public string Age { get; set; }
}

默认模型绑定器只能绑定到具有公共getter / setter的属性,而不能绑定到字段。它只是忽略了字段,它们永远不会被初始化。