2010-06-16 63 views
1

我有一個用戶控件正在呈現項目列表。每行包含隱藏字段中的唯一標識,文本和刪除按鈕。當點擊刪除按鈕時,我使用jquery ajax來調用控制器方法DeleteCA(見下文)。 DeleteCA返回替換舊列表的項目的新列表。.net MVC RenderPartial呈現不在模型中的信息

[HttpPost] 
public PartialViewResult DeleteCA(CAsViewModel CAs, Guid CAIdToDelete) 
{ 
    int indexToRemove = CAs.CAList.IndexOf(CAs.CAList.Single(m => m.Id == CAIdToDelete)); 
    CAs.CAList.RemoveAt(indexToRemove); 
    return PartialView("EditorTemplates/CAs", CAs); 
} 

我檢查過DeleteCA確實刪除了正確的項目。傳遞給PartialView的CA的修改列表不再包含已刪除的項目。

呈現部分視圖時會發生一些不可思議的事情。列表中項目的數量會減少,但始終是從列表中刪除的最後一個元素。呈現的項目不對應於發送到PartialView的列表/模型中的項目。

在usercontrol文件(ascx)中,我使用了Model.CAList和lambda表達式m => m.CAList。

usercontrol如何渲染不在模型中發送給PartialView的東西?

感謝名單 安德烈亞斯

回答

1

這聽起來像的ModelState是麻煩在這裏,因爲你綁定到CAs的ModelState中在後臺保存此值Attempted Values,所以其真正的對象不再出現在模型中,但ModelSate仍然具有已刪除對象的值。您可以嘗試:

ModelState.Clear(); 

刪除所有這些舊值。

+0

啊!非常感謝奧馬爾! – Andreas 2010-06-17 06:57:16

0

檢查螢火蟲什麼是真正的反應。這樣你就可以看到你是否有服務器端問題,或者它是一個jQuery問題。

+0

謝謝馬爾科姆。我正在javascript中調試回調函數,很明顯返回的html包含錯誤。這是一個服務器端問題。 – Andreas 2010-06-17 06:48:29