2012-09-06 46 views
2

我正在使用ASP.NET MVC 4與Razor視圖引擎。我試圖通過從我的視圖中刪除模型中的項目從我的webgrid中刪除項目。在我看來,這個模型是這樣的:使用JavaScript處理剃刀模型

@model List<MiscCommon.Entities.Person> 

而我試圖從這個列表中刪除一個項目,通過JavaScript,失敗:

function RemovePerson(personId) { 
    alert(personId); // Test. This works. 
    //var people = '@Model[0].FirstName'; // This is a string. I want the actual model. 
    @foreach(var person in Model) 
    { 
     if (person.Id == @:personId) { // Remove row here } 
    } 
} 

在這一javascript函數,我得到正確的ID的人。我怎樣才能從模型中刪除它? (我希望我的web網格將在從模型中刪除行時更新)。

回答

3

視圖的模型在服務器上執行時處理。它與稍後在客戶端上執行的JavaScript沒有直接關係。你可以在你的JS中混合/匹配Razor表達式(就像你在做的那樣),但是JS不會將模型作爲一個對象(除非你告訴它)知道任何東西。

如果你試圖操縱一組ID的,你可以這樣做多方面:

  • 添加一個數據 - *屬性包含對象的ID表的每一行。

  • 使用Razor創建一個JS數組聲明,其中包含您的ID列表。當視圖呈現時,數組聲明將被渲染。

  • 隱藏字段(S)包含數據,需要

  • AJAX動作鏈接

如果你真的想在客戶端上的整個模型,你可以把它序列化的JSON字符串一個隱藏的字段或腳本塊內的對象字面值。然而,通常有更好的方法。

你也可以看看Knockout,這在我看來更強調客戶端模型。不過,沒有必要解決這個問題。