C# ";模型";在.NETMVC中
Linq 2 SQL、ADO.Net数据实体和数据集等数据框架如何与.Net MVC定义的“模型”相关 我问这个问题的原因是,我正在尝试学习.Net框架的细节,而不依赖于许多工具,这些工具使它变得简单,并向您隐藏工作 我在探索应用程序中构建的“模型”只是更新数据库的PostgreSQL命令。我故意不使用数据“框架” 我发现作为.NETMVC框架的一部分提供的许多功能对我来说都不起作用。UpdateModel()和任何与ModelState相关的东西似乎都不知道发生了什么C# ";模型";在.NETMVC中,c#,asp.net-mvc,postgresql,C#,Asp.net Mvc,Postgresql,Linq 2 SQL、ADO.Net数据实体和数据集等数据框架如何与.Net MVC定义的“模型”相关 我问这个问题的原因是,我正在尝试学习.Net框架的细节,而不依赖于许多工具,这些工具使它变得简单,并向您隐藏工作 我在探索应用程序中构建的“模型”只是更新数据库的PostgreSQL命令。我故意不使用数据“框架” 我发现作为.NETMVC框架的一部分提供的许多功能对我来说都不起作用。UpdateModel()和任何与ModelState相关的东西似乎都不知道发生了什么 这些功能大部分与使用Li
这些功能大部分与使用Linq 2 SQL或ADO.Net数据实体有关吗?如果是这样的话,那没关系,我只是还不太了解这种关系。与视图和控制器不同,ASP.NET MVC应用程序中的模型实际上没有任何限制。它只允许您在应用程序中对数据进行建模,并清晰、安全地表达您的意图,而无需借助
ViewData
等字典来传递数据
就模型相关功能而言,我相信(不是100%确定)它是基于在模型对象上具有公共属性。如果调用UpdateModel
或其相关函数,它将根据表单数据等在模型对象上设置公共属性。如果它找到与表单输入匹配的适当属性,它将在内存对象上设置所有属性。您仍然需要包含逻辑,以便将其实际持久化到数据库或任何您想做的事情
希望这至少为你指明了正确的方向。找到了答案。为了完整起见 好的,那么.Net中的模型有一个“最低标准” 此模型不被接受:
namespace MVCApplication.Models
{
public class Person
{
public int ID;
public string Name;
public string Title;
public string Description;
public string Phone;
public string Address;
public string Country;
public Person()
{
}
}
}
namespace MVCApplication.Models
{
public class Person
{
private int _ID;
private string _Name;
...
public Person() {}
public int ID { get{ return _ID } set{ this._ID = value } }
public int Name { get{ return _Name } set{ this._Name = value } }
...
}
}
这被视为一种模式:
namespace MVCApplication.Models
{
public class Person
{
public int ID;
public string Name;
public string Title;
public string Description;
public string Phone;
public string Address;
public string Country;
public Person()
{
}
}
}
namespace MVCApplication.Models
{
public class Person
{
private int _ID;
private string _Name;
...
public Person() {}
public int ID { get{ return _ID } set{ this._ID = value } }
public int Name { get{ return _Name } set{ this._Name = value } }
...
}
}
我不能说我完全理解为什么,但至少现在我知道了 基本上,您的“Model”对象需要有一个无参数构造函数和公共get/set属性,这样它才能轻松地使用DefaultModelBinder
提示:我相信如果你没有定义一个无参数的构造函数,就会为你推断出一个空的构造函数(只是为了让你不会发疯:“啊!我没有无参数的构造函数”)
因此,这通常可以很好地工作:
public class Customer
{
public int ID { get; set; }
public string Name { get; set; }
public string Number { get; set; }
public string Email { get; set; }
}
这是好消息,也是坏消息。很好,你所说的与我对MVC目标的理解是一致的;糟糕的是,现在我需要寻找UpdateModel不起作用的另一个原因。@Andreweins:如果不需要自定义setter和getter逻辑,自动setter和getter会使属性的使用更加简单。上面的例子使用了自动属性,而不是你的答案,你需要将它们连接到
private
字段。对于这样一个简单的对象来说,这似乎是一个很大的开销。感谢您的澄清。如果您查看MVC源代码(特别是DefaultModelBinger),您将看到它使用反射对属性执行绑定。另外,尝试使用语法public int-ID{get;set;}
,这样就不那么麻烦了。我只是想说明一下,MVC是一种视图级模式,而您提到的其他技术是持久层技术。通常情况下,中间会有一个层来处理业务逻辑,并将持久化实体映射到视图模型。也就是说,每个应用程序都应该根据自己的需求进行设计,并且没有一刀切的模式。