Asp.net mvc 如何获取ASP.NET MVC';s UpdateModel是否忽略主键列?

Asp.net mvc 如何获取ASP.NET MVC';s UpdateModel是否忽略主键列?,asp.net-mvc,primary-key,updatemodel,Asp.net Mvc,Primary Key,Updatemodel,我有一个带有GUID主键的表,我正试图使用ASP.NET MVC控制器的UpdateModel方法将新创建的对象插入其中(db是LINQ to SQL数据上下文): 首先,在模型上编辑和创建的自动生成视图将包含一个主键字段供用户编辑,这似乎很奇怪,但删除这些字段很容易 但是我遇到了一个问题,当主键没有作为表单集合的一部分传入时,调用UpdateModel会引发异常 我是否缺少某种方法来标记主键列,使其成为用户(以及扩展到UpdateModel)不应该处理的东西?我可以添加一个includePro

我有一个带有GUID主键的表,我正试图使用ASP.NET MVC控制器的
UpdateModel
方法将新创建的对象插入其中(db是LINQ to SQL数据上下文):

首先,在模型上编辑和创建的自动生成视图将包含一个主键字段供用户编辑,这似乎很奇怪,但删除这些字段很容易

但是我遇到了一个问题,当主键没有作为表单集合的一部分传入时,调用
UpdateModel
会引发异常

我是否缺少某种方法来标记主键列,使其成为用户(以及扩展到
UpdateModel
)不应该处理的东西?我可以添加一个
includeProperties
数组并保留主键的名称,但这不是很简单)


我还可以在表单中添加一个隐藏字段,其中包含主键——使用GUID主键,我可以在GET请求中创建它

首先:在这种情况下,主键为的属性应该是只读的


您还可以使用自己的BindModel类。

首先:在这种情况下,主键属性应该是只读的


您还可以使用自己的BindModel类。

在不更新模型对象时,不要使用
UpdateModel
。在本例中,您正在创建一个。。。ScottGu在这方面有一些很好的例子

如果您想要一种更简单的数据绑定方式,如果您使用正确的命名约定,ASP.NET MVC将自动为您完成大量工作。例如,具有输入字段“firstName”、“lastName”和“birthDate”的表单可以将其数据发送到具有以下签名的操作方法:

public ActionResult Create(string firstName, string lastName, DateTime birthDate)
参数将由表单值填充。请注意,数据类型不必是字符串-事实上,您甚至可以绑定到自己的类。如果你有这门课

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime Birthdate { get; set; }
}
…以及带有输入字段“person_FirstName”、“person_LastName”和“person_BirthDate”的表单。您可以立即将其绑定到新的person对象:

public ActionResult Create(Person person) { ... }

很好,是吗

不更新模型对象时,不要使用
UpdateModel
。在本例中,您正在创建一个。。。ScottGu在这方面有一些很好的例子

如果您想要一种更简单的数据绑定方式,如果您使用正确的命名约定,ASP.NET MVC将自动为您完成大量工作。例如,具有输入字段“firstName”、“lastName”和“birthDate”的表单可以将其数据发送到具有以下签名的操作方法:

public ActionResult Create(string firstName, string lastName, DateTime birthDate)
参数将由表单值填充。请注意,数据类型不必是字符串-事实上,您甚至可以绑定到自己的类。如果你有这门课

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public DateTime Birthdate { get; set; }
}
…以及带有输入字段“person_FirstName”、“person_LastName”和“person_BirthDate”的表单。您可以立即将其绑定到新的person对象:

public ActionResult Create(Person person) { ... }
很好,是吗