ASP.NET MVC UpdateModel - 字段与属性?

时间:2010-04-15 18:18:06

标签: asp.net-mvc

我将一些常见属性重构为基类,并且我的模型更新立即失败。 UpdateModel()和TryUpdateModel()似乎没有更新继承的公共属性。

我无法在MSDN或Google上找到有关这些方法的规则或语义的详细信息。文档简洁(http://msdn.microsoft.com/en-us/library/dd470933.aspx),只是陈述:

  

使用控制器当前值提供程序中的值更新指定的模型实例。

求助:MVC.NET确实处理了继承的属性。事实证明这与继承无关。我的基类是使用公共字段而不是属性实现的。将它们切换为正式属性(添加{get; set;})就是我所需要的。这之前我一直在咬我,我一直想要使用简单的公共字段。我认为字段和属性在语法上是相同的,并且可以被认为在语义上等同于类的用户。

2 个答案:

答案 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);
        }