2009-12-29 49 views
4

我在ASP.NET MVC網站上爲我們的消息視圖創建了一個如下面的模型(來自Facebook的photoshopped)。 alt text如何根據ASP.NET MVC中單擊的按鈕來更改表單提交的操作?

我正在尋找一個表格,看起來像這樣的「標記爲未讀」和「刪除」功能。我想弄清楚如何用html表單來做到這一點。

如何使「標記爲未讀」提交給一個表單url,並且「刪除」將同一表單提交到不同的url?

如果您點擊「標記爲未讀」,我希望它將表單提交給「/ Messages/MarkUnread」,如果是「刪除」按鈕,我希望它將表單提交給「 /信息/刪除」。

我想在不使用javascript的情況下使用這個工具,一旦它添加了jQuery窗體插件,它將在JS啓用時執行ajax提交,否則它將執行常規表單發佈。

回答

4

我是一個總的MVC newb,但我相信表單只能提交一個動作。

這就是說,在你張貼的行動,我知道你就可以告訴哪個按鈕被點擊,妥善地處理事情,如:

[AcceptVerbs(HttpVerbs.Post)] 
    public ViewResult Index(string btnCompose, string btnMarkAsRead, string btnDelete) 
    { 
     if (btnCompose != null) 
     { 
      // Compose was clicked, handle appropriately 
     } 
     else if (btnMarkAsRead != null) 
     { 
      // Mark As Read was clicked, handle appropriately 
     } 
     else if (btnDelete != null) 
     { 
      // Delete was clicked, handle appropriately 
     } 
    } 

這是假設你的HTML元素被命名爲「 btnDelete「等。

1

正如喬什所說,一個表單 - 一個沒有javascript的動作。 提交元素(或按鈕元素)可以具有相同的名稱,但具有不同的值,可以讓您知道被按下的人。 對於不同的操作,可以根據按鈕按下處理請求的操作,也可以將表單數據放入TempData字典中並根據按鈕按下的值返回RedirectToAction()。 最後一個將是後來ajaxifying的一個很好的起點。

0

喬希是正確的,在MVC中,用了JavaScript的,一種形式=一個動作

您可以使用Josh的行動,一個修飾,添加的FormCollection作爲參數。您只需確保每個複選框都有唯一的名稱,並且很容易識別。 IE:如果消息ID是20,使複選框名chk20

[AcceptVerbs(HttpVerbs.Post)] 
public ViewResult Index(string btnCompose, string btnMarkAsRead, string btnDelete, FormCollection formCollection) 
{ 
    if (btnCompose != null) 
    { 
    //Return the compose View 
    } 
    else if (btnMarkAsRead != null) 
    { 
    // Mark As Read was clicked, handle appropriately 
    //Loop through every key in the collection looking for stuff that starts with chk 
    foreach (string key in formCollection.Keys) 
    { 
     if (key.StartsWith("chk")) 
     { 
     //Do Mark Read Here 
     } 
    } 
    } 
    else if (btnDelete != null) 
    { 
    //Loop through every key in the collection looking for stuff that starts with chk 
    foreach (string key in formCollection.Keys) 
    { 
     if (key.StartsWith("chk")) 
     { 
     //Do Mark Delete Here 
     } 
    } 
    } 
} 

類似的東西可能會工作......你必須嘗試看看。我會使用jQuery,並自己構建一個回到正確的操作。

相關問題