Asp.net mvc ASP.NET MVC更新模型-字段与属性?

Asp.net mvc ASP.NET MVC更新模型-字段与属性?,asp.net-mvc,Asp.net Mvc,我将一些公共属性重构为基类,模型更新立即开始失败。UpdateModel()和TryUpdateModel()似乎没有更新继承的公共属性 关于这些方法的规则或语义,我在MSDN和Google上都找不到详细的信息。这些文件非常简洁(),简单地说明: 使用控制器的当前值提供程序中的值更新指定的模型实例 解决方法:MVC.NET确实可以很好地处理继承的属性。结果证明,这与继承无关。我的基类是用公共字段而不是属性实现的。我只需要将它们转换为形式属性(添加{get;set;})。这让我感到痛苦,我一直想使

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

关于这些方法的规则或语义,我在MSDN和Google上都找不到详细的信息。这些文件非常简洁(),简单地说明:

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


解决方法:MVC.NET确实可以很好地处理继承的属性。结果证明,这与继承无关。我的基类是用公共字段而不是属性实现的。我只需要将它们转换为形式属性(添加{get;set;})。这让我感到痛苦,我一直想使用简单的公共字段。我认为对于类的用户来说,字段和属性在语法上是相同的,并且在语义上是等价的。

MVC将绑定到继承类的属性。模型绑定器调用类似typeof(yourtype).GetProperties()的函数,该函数可以很好地返回所有继承的成员

刚刚通过以下方式进行了测试:

public class PersonBase
{
    public string Name { get; set; }
}

public class User : PersonBase
{
    public string FavoriteFood { get; set; }
}
“我的假设是,这些方法只反映在顶级上,”


那怎么办?“top”类也是基类。

这一类也让我好奇。 我为一个班级的
经理
制作了一个编辑表单,他来自一个
(毕竟,经理也是人:-)

那么在这个动作方法中,

 public ActionResult Edit(Manager manager )
        {
            return View(manager);
        }
它是从一个视图调用的,其中
Manager
(派生类型)作为强类型模型变量,当悬停Manager变量时,它会显示基类(实际上是:base:
Person
)和Manager的一个额外属性

也尝试了formcollection,这同样有效:

 public ActionResult Edit(FormCollection  formCollection )
        {
            Manager manager = new Manager();
            UpdateModel(manager );
            return View(manager);
        }

看到我上面的编辑,我终于意识到,基类有公共字段,而不是属性。我想将公共字段视为属性,从语义上讲,它们应该是这样的,但模型绑定似乎忽略了字段。感谢您确认我的问题出在其他地方。请参阅我的编辑。是的,与GetFields()相反,使用GetProperties()进行反射正是问题所在。我本来希望看到模型绑定同时更新公共属性和字段,因为属性是伪装为字段符号的语法糖。但是,这是我缺乏MVC.NET知识。现在我知道了,这很简单,但我不确定我是否喜欢这种区别。“top”类也是基类。我是说,对不起,打得很快。。。我应该说叶课。