2009-09-23 79 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) { ... } 

不錯,對吧? =)

相關問題