我将一些常见属性重构为基类,并且我的模型更新立即失败。 UpdateModel()和TryUpdateModel()似乎没有更新继承的公共属性。
我无法在MSDN或Google上找到有关这些方法的规则或语义的详细信息。文档简洁(http://msdn.microsoft.com/en-us/library/dd470933.aspx),只是陈述:
使用控制器当前值提供程序中的值更新指定的模型实例。
求助:MVC.NET确实处理了继承的属性。事实证明这与继承无关。我的基类是使用公共字段而不是属性实现的。将它们切换为正式属性(添加{get; set;})就是我所需要的。这之前我一直在咬我,我一直想要使用简单的公共字段。我认为字段和属性在语法上是相同的,并且可以被认为在语义上等同于类的用户。
答案 0 :(得分:1)
MVC将绑定到继承类的属性。模型绑定器调用类似typeof(yourtype).GetProperties()的东西,它返回所有继承的成员就好了。
刚刚测试过:
public class PersonBase
{
public string Name { get; set; }
}
public class User : PersonBase
{
public string FavoriteFood { get; set; }
}
“我的假设是这些方法仅反映在顶级课程上,”
那怎么办? “顶级”类也是基类。
答案 1 :(得分:1)
Manager
的课程Person
制作了一个编辑表单
(毕竟,经理人也是: - ))
然后在这个动作方法
public ActionResult Edit(Manager manager )
{
return View(manager);
}
从具有Manager
(派生类型)的视图调用的作为强类型模型变量,当悬停管理器变量时,它向我显示基类(它实际上说:base:Person
)和经理的一个额外属性
也尝试了formcollection,这也有效:
public ActionResult Edit(FormCollection formCollection )
{
Manager manager = new Manager();
UpdateModel(manager );
return View(manager);
}