2011-06-01 42 views
14

我有兩個模型 - 類別和文章。我有幾乎相同的刪除視圖和控制器爲他們兩個。唯一的區別是,它適用於類別,但與文章我得到HttpPost空模型。MVC3 - 模型空崗

分類:

public ActionResult DeleteCat(int id) 
    { 
     Category cat = db.CategoryByID(id); 
     if (cat != null) 
     { 
      return View(cat); 
     } 

     return RedirectToAction("Index"); 
    } 

    [HttpPost] 
    public ActionResult DeleteCat(Category model) 
    { 
     db.DeleteCategory(model.CategoryID); 

     return RedirectToAction("Index"); 
    } 

文章:

public ActionResult Delete(int id) 
    { 
     Article art = db.ArticleByID(id); 
     if (art != null) 
     { 
      return View(art); 
     } 

     return RedirectToAction("Index"); 

    } 

    [HttpPost] 
    public ActionResult Delete(Article model) 
    { 
     db.DeleteArticle(model.ArticleID); 

     return RedirectToAction("Index"); 
    } 

這兩種觀點都是由Visual Studio生成的,我並沒有改變他們。當我想刪除一個類別時,一切都很順利。但是當我想刪除一篇文章時,它首先從數據庫中正確選擇,然後顯示視圖(一切正常),但是當我點擊刪除按鈕時,模型是空的(所有屬性都是0,null或false)和所以db.DeleteArticle拋出一個異常(ArticleID = 0沒有文章)。任何人都可以提供任何提示我應該檢查什麼或我應該如何解決這個問題?

+0

什麼是您的文章類的樣子喜歡? – Keith 2011-06-01 19:03:04

+2

什麼被張貼? – SLaks 2011-06-01 19:03:24

+0

是的,和@SLaks說的一樣,你可以添加一個參數到你的HttpPost刪除操作中,一個「FormCollection coll」。發佈後,您可以查看該集合以查看隨表單發佈的所有鍵/值。 – Keith 2011-06-01 19:05:16

回答

6

這可能會發生兩種主要方式。

一種方法是您有自定義模型綁定不起作用。我假設你正在做所有的東西,所以這不適用。

最可能的問題是數據未獲取發佈。確保中的字段與Delete按鈕在POST中相同。

10

有同樣的問題。我的一個模型的屬性被稱爲模型

public String model { get; set; } 

物業更名爲基於myModel後。模型對象在ActionResult中停止返回null

+0

這真的是隨機的!我不能相信像這樣的錯誤存在,並且尚未解決! – Andy 2011-10-04 09:35:37

+2

我的參數被稱爲名稱,並導致相同的問題。謝謝! – Derrick 2012-03-03 18:49:55

+0

不客氣:) – adinas 2012-03-04 11:51:02

9

確保您的模型將屬性標記爲屬性(如果使用VB或C#與get/set),而不是公共字段... MVC不會映射到公共領域,但會對公共財產。

17

如果[HttpPost] Action中的模型參數與模型中的屬性名稱相同,則它將爲空,並且將無法驗證該字段是否無效。

實施例:

public class ContactMessage { 
    public string Name { get; set; } 
    public string sankdmfskm { get; set; } 
} 

[HttpPost] 
public ActionResult Index(ContactMessage sankdmfskm) 
{ 
... 
} 

sankdmfskmnull

嘗試在MVC3和MVC4。

2

我和你有同樣的問題。我在你的情況下做過

[HttpPost] 
public ActionResult Index(ContactMessage sankdmfskm) 
{ 
UpdateModel(sankdmfskm); 
... 
} 

模型更新後,它返回了我正確的值,而不是null。

0

我添加了一個答案,因爲它與其他人不同,有人可能會覺得它有用。

我有一個BaseViewModel,因爲我在一個視圖中使用多個模型。

在我的控制器動作,而不是傳遞BaseViewModel(和喜歡model.RegistrationFormModel.Username參數)我通過RegistrationFormModel所以還不是我用我的觀點結合BaseViewModel

+0

也許一個小代碼片段可以幫助 – theLearner 2018-03-08 04:03:56