2011-06-06 39 views
0

我有兩個問題,都與相同的視圖有關:所以有稱爲ProductDetails的視圖,它顯示產品的細節。ASP.NET MVC取消而不是刪除

每個產品可以有狀態:

  • 可用 - 在這種情況下,兩個按鈕可用「編輯」和「刪除」(這將改變爲「不可用」的產品的地位,但將不會將其從數據庫中刪除)

  • 不可用 - 在這種情況下,頁面顯示產品,但沒有可編輯或刪除的選項 可見。

控制器ProductsController有一個動作顯示該視圖的詳細信息。

的問題是,我不知道如何實現這兩個按鈕(編輯和刪除),因爲:

  • 編輯發送到另一個動作方法(編輯其中顯示另一種觀點)< - 這工作
  • 刪除應該(IMO)在當前頁面上發佈帖子。在發佈後操作中,產品的狀態會發生變化,並再次顯示視圖。

我希望這兩個按鈕看起來像鏈接。如果我把一個表格刪除,那麼它將顯示爲一個按鈕。我想避免讓按鈕看起來像一個與CSS的鏈接。或者...至少我想爲這兩個「按鈕」使用相同的HTML元素。

回答

0

這是更顯示元素的問題,所以我已經將CSS標籤添加到您的問題中,因爲一些備選答案可能依賴於此。

我個人認爲,試圖使一個按鈕,看起來像一個文本鏈接將是非常尷尬的,甚至當你關閉你有排隊的文字問題的邊框和背景等

我說你有2個「簡單」選項。

首先,您可以使刪除不發佈刪除請求,但鏈接到刪除確認頁面(或彈出與您的刪除窗體和按鈕的JS模式窗口)。

其次,你可以讓它們看起來像按鈕,而你要求它看起來像一個鏈接,我認爲主要的一點是用戶界面的一致性,而不是專門的鏈接。你可以使用JQueryUI並在兩個元素上調用.button(),調用JQueryUI for 1特性有點矯枉過正,但這是一個快速變化,當然你可以複製類似按鈕的鏈接樣式的相同想法,但不得不花費時間處理瀏覽器CSS問題。

+0

我很喜歡那個刪除確認選項:)我想我會去了。 – dave 2011-06-06 11:12:08

0

刪除鏈接應發佈到刪除操作,該操作應該(驗證和數據庫更新後)重定向到詳細信息操作。

public ActionResult Details(int productId) 
{ 
    // Your current action method 

    return View(model); 
} 

public ActionResult Remove(int productId) 
{ 
    // Validate productId 
    // Update DB 

    return RedirectToAction("Details", new { productId = productId }); 
} 

您可以輕鬆地通過使用GET而不是POST來解決您的鏈接vs按鈕問題。不要被最佳實踐所矇蔽。

或者您可以使用執行一個一行JavaScript函數職位形式的刪除鏈接:

<a href="javascript:document.forms['myform'].submit()">Remove</a> 
+0

謝謝你的回答。我不想更改Remove到HttpGet,因爲這是不可逆轉的行爲(是的,業務需要)。 – dave 2011-06-06 11:10:29