Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ";模型";在.NETMVC中_C#_Asp.net Mvc_Postgresql - Fatal编程技术网

C# ";模型";在.NETMVC中

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数据实体和数据集等数据框架如何与.Net MVC定义的“模型”相关

我问这个问题的原因是,我正在尝试学习.Net框架的细节,而不依赖于许多工具,这些工具使它变得简单,并向您隐藏工作

我在探索应用程序中构建的“模型”只是更新数据库的PostgreSQL命令。我故意不使用数据“框架”

我发现作为.NETMVC框架的一部分提供的许多功能对我来说都不起作用。UpdateModel()和任何与ModelState相关的东西似乎都不知道发生了什么


这些功能大部分与使用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是一种视图级模式,而您提到的其他技术是持久层技术。通常情况下,中间会有一个层来处理业务逻辑,并将持久化实体映射到视图模型。也就是说,每个应用程序都应该根据自己的需求进行设计,并且没有一刀切的模式。