2010-03-04 17 views
2

我正在嘗試編輯記錄。我有默認路由。
當我點擊提交按鈕,我在UpdateModel行上得到一個異常:
'MyProject.Mvc.Models.Product'類型的模型無法更新。
在頁面上,ProductId字段的驗證提示該值無效:
值'9'無效。 9是我嘗試編輯的記錄的ID。 什麼可能是錯的?如何使用MVC2 RC2更新

public ActionResult Edit(int id) 
{ 
    Product product = productRepository.GetProduct(id); 

    return View(new ProductFormViewModel(product)); 
} 

[HttpPost] 
public ActionResult Edit(int id, FormCollection productFormViewModel) 
{ 
    Product product = productRepository.GetProduct(id); 
    try 
    { 
    // TODO: Add update logic here 
    UpdateModel(product, "Product"); 
    productRepository.Save(); 
    return RedirectToAction("Index"); 
    } 
    catch (Exception ex) 
    { 
     return View(new ProductFormViewModel(product)); 
    } 
} 

如果我更改更新模型線:

UpdateModel(product); 

則不會拋出異常,並且數據沒有在數據庫中更新。

[編輯]

我使用實體框架

namespace MyProject.Mvc.Models 
{ 
    [MetadataType(typeof(ProductMetaData))] 
    public partial class Product 
    { 
     public Product() 
     { 
      // Initialize Product 
      this.CreateDate = System.DateTime.Now; 
     } 
    } 

    public class ProductMetaData 
    { 
     [Required(ErrorMessage = "Product name is required")] 
     [StringLength(50, ErrorMessage = "Product name must be under 50 characters")] 
     public object ProductName { get; set; } 

     [Required(ErrorMessage = "Description is required")] 
     public object Description { get; set; } 
    } 

    public class ProductFormViewModel 
    { 
     public Product Product { get; private set; } 

     public ProductFormViewModel() 
     { 
      Product = new Product(); 
     } 

     public ProductFormViewModel(Product product) 
     { 
      Product = product; 
     } 
    } 
} 
+0

我使用NerdDinner作爲指南。 – Picflight 2010-03-04 07:21:09

+0

問題在於編輯視圖,<%@ Page Title =「」Language =「C#」MasterPageFile =「〜/ Views/Shared/Site.Master」Inherits =「System.Web.Mvc.ViewPage 「%>如果我傳入視圖模型ProductFormViewModel它不會更新,但如果我將它更改爲<%@ Page Title =」「Language =」C#「MasterPageFile =」〜/ Views/Shared/Site.Master 「Inherits =」System.Web.Mvc.ViewPage 「%>它更新。 – Picflight 2010-03-11 16:23:10

回答

0

您是否需要編輯ID?如果ID是表中產品的PK,那麼它可能是一個綁定問題。 嘗試

[MetadataType(typeof(ProductMetaData))] 
[Bind(Exclude="ID")] 
public partial class Product 
{ 
    public Product() 
    { 
     // Initialize Product 
     this.CreateDate = System.DateTime.Now; 
    } 
} 
+0

我從視圖中刪除了Id,因爲我不需要綁定它,但模型仍然不會更新。我在MVC 1中使用了相同的代碼並更新。我認爲問題在於MVC 2.也許有不同的更新方式。我正在尋找NerdDinner,最新的ND有MVC 2代碼,但在我的項目中,模型不會更新 – Picflight 2010-03-11 16:26:38

+0

@Picflight - 如果ID不在視圖中,則無關緊要。如果你還沒有用Bind屬性明確地排除它,ModelBinder就會綁定它。你爲什麼不嘗試按上面所示排除它,看看會發生什麼? – 2010-03-11 17:05:55

+0

尼克,我嘗試了你提到的,我也得到了同樣的行爲。如果我將Edit View頁面指令從Inherits =「System.Web.Mvc.ViewPage 」更改爲Inherits =「System.Web.Mvc.ViewPage 」然後模型更新。 – Picflight 2010-03-11 22:26:53

0

你可以發佈你的模型的源代碼?模型是否有要更新的類的字段,或者只有這個類是對象(Product)? 可能存在當你的模型對象產品becouse的問題,你應該通過與類名的UpdateModel方法前綴......

0

UpdateModel(product, "Product");的問題是,您使用的是相同的前綴(Product)作爲Product班級名稱。嘗試使用不同的前綴。爲此,您可能需要重命名ProductFormViewModel類的Product屬性。

+0

我試過了,不起作用。我得到相同的行爲。 – Picflight 2010-03-06 10:16:45