为什么MVC绑定模型需要属性,而不是字段[重复项]

问题描述 投票:1回答:2

我正在使用带有MVC的ASP.NET Core开发Web应用程序。控制器处理来自HTML form的POST请求的操作通常会接受用作绑定模型的参数,例如:

[HttpPost]
public IActionResult Edit(ModelBindingClass userInput)

在上面的示例ModelBindingClass中,我发现绑定模型的类必须遵守两个条件:

  1. 具有无参数构造函数
  2. 具有可公开设置的属性来存储用户输入

我想第一个条件是确保MVC中间件可以轻松实例化对象。

但是为什么不能使用公共字段而不是属性?

public class ModelBindingClass
{
    public int Age { get; set; } // binder will set it correctly

    public int Height; // binder will not
}

欢迎任何指向相关源代码的答案。谢谢! :-)

c# properties asp.net-core-mvc field model-binding
2个回答
0
投票

回答您的问题

为什么它不能使用公共字段而不是属性?

A模型联编程序可以利用公共字段(sam在评论中提供了一个示例)。当前没有默认的模型绑定器-但是要知道为什么您要问他们,因为他们似乎没有在源代码中记录该设计决策(据我所知)...

可能的解释(完全猜测)是接口可以具有属性,但不能具有字段,并且它们可能在代码的较深部分使用接口来表示某些类型的绑定方案。


-1
投票

理想情况下,您不应有任何公共领域。您应该始终将字段声明为私有。如果需要访问这些字段,则可以提供在内部访问这些字段的属性。您可以阅读this article以了解它们之间的区别。引用文章:

字段是类的普通变量成员。通常,您应该将您的字段声明为私有,然后使用“属性”获取和设置他们的价值观。这样,您将不会直接影响他们的价值观。这是常见的做法,因为让公众成员违反了OOP中的封装概念。

© www.soinside.com 2019 - 2024. All rights reserved.