2013-10-17 73 views
0

我剛剛開始使用WebGrid,並且一直在尋找合適的方法來刪除一行。在ASP.NET MVC 4中刪除函數的正確方法WebGrid

但我不想使用其他窗口重定向用戶的解決方案。我只想當用戶點擊刪除時彈出一個確認窗口,如果用戶選擇是,刪除數據並刷新頁面,但與Ajax。

我已經找到了一種方法來做到這一點,但我沒有看到其他人以同樣的方式在互聯網上做它,我想知道在未來遵循它是否是一種好的做法。

在的WebGrid,我有以下列定義:

grid.Column(header: "", format: @<text> <button type="submit" name="Delete" value="@item.Id">Delete</button></text>) 

它是在一個@ Ajax.Beginform(...){...}

在我的控制器我檢查,如果刪除按鈕被點擊並獲得編號是這樣的:

[HttpPost] 
public ActionResult Index(ManageOvertimesViewModel model, FormCollection formCollection) 
{ 
... 
if (formCollection["Delete"] != null) 
    { 
    int id = int.Parse(formCollection["Delete"]); 
    //Delete the data 
    return PartialView("IndexPartial", model); 
    } 
... 
} 

當我刪除此視圖顯示一些其他的數據是可以改變的,所以我需要有張貼的視圖模型重建在某些下拉菜單這是我不使用Ajax.ActionLink來解決刪除的原因。

那麼這是實現刪除的好方法嗎?

回答

0

在這裏,您從查看有例如:從控制器

grid.Column("", "", canSort: false, format:@<b>@Html.ActionLink("Delete", "DeletePrizeRun", new { id = item.ID })</b>, style: "column") 

下面的代碼:

public ActionResult DeletePrizeRun(int id) 
{ 
    using (var context = new ExampleDataContext()) 
    { 
     var prizeRun = context.PrizeRuns.FirstOrDefault(p => p.id == id); 
     context.PrizeRuns.Remove(prizeRun); 
     context.SaveChanges(); 
    } 
} 
+0

正如我所說我不想使用ActionLink,因爲我需要ViewModel服務器端重新創建視圖,我必須通過ajax。 – jannagy02

0

您的解決方案網格必須是Ajax的表單中。 ajax表單將進行部分更新,並且網格將會執行(如果您指定了一個ajax目標,如果要避免頁面重新加載,至少在使用由WebGrid生成的尋呼機/排序標頭進行分頁和排序時您必須指定)。那是我開始使用類似解決方案的頭痛問題。網格在排序或分頁時開始出現奇怪的行爲,例如,控制器被執行多次。

我最終放棄了WebGrid,並且現在使用帶有剃刀命令的html表格,這很好用,並提供了更好的控制。

我建議不要使用WebGrid除了最簡單的演示。

除此之外,我認爲你的方法沒有問題,使用名稱/值將數據傳遞給控制器​​爲我工作。

+0

感謝您的回覆。 A一直在考慮使用jQuery UI表,因爲之前使用過的其他jquery-ui元素都很好。無論如何,在我的webgrid排序和分頁工作正常。但如果它是一個簡單的html表,我會問同樣的刪除的概念。 – jannagy02