2009-09-23 54 views
0

我有成我想要使用ASP.NET MVC控制器的UpdateModel法(DB是一个LINQ到SQL数据上下文)插入一个新创建的对象GUID主键的表:我怎样才能让ASP.NET MVC的UpdateModel忽略主键列?

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Create(FormCollection collection) 
    { 
     Fields field = new Fields(); 
     field.ID = Guid.NewGuid(); 

     try 
     { 
      UpdateModel(field); 

      db.Fields.InsertOnSubmit(field); 
      db.SubmitChanges(); 

      return RedirectToAction("Index"); 
     } 
     catch 
     { 
      return View("Edit", field); 
     } 
    } 

首先,它似乎很奇怪,对于编辑自动生成的意见,并在模型上创建将包括用户编辑一个主键字段,但它很容易删除这些。

但我运行到哪里调用UpdateModel抛出主键时没有传递进来的形式集合的一部分异常的问题。

我是否缺少某种标记主键列的方式,因为用户(和扩展名,UpdateModel)的呼叫不应该与?我可以添加一个includeProperties数组,并保留主键的名称,但这不是非常干燥)。

我也可以隐藏字段添加到包含主键我的形式 - 一个GUID主键,我可以做到这一点的GET请求来创建。

回答

0

首先:地产与主键应该是只读的在这种情况下。

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

3

不要使用UpdateModel当你不是更新模型对象。在这种情况下,您是创建 one ... ScottGu在this blog post中有一些很好的示例。

如果你想要一个更简单的方法进行数据绑定,ASP.NET MVC会自动做了很多的工作适合你,如果你使用正确的命名约定。例如,与输入的表单字段“名字”,“姓氏”和“生日”可以其数据发送到一个操作方法具有以下签名:

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) { ... } 

不错,对吧? =)

相关问题