2013-04-17 57 views
1

我已經創建了一個C# ASP.NET MVC應用程序。在Index視圖中,我添加了3個按鈕,當每個按鈕被點擊時,我想執行Index控制器中的3個不同功能。如何從同一視圖執行3種不同的控制器方法

索引視圖駐留在主文件夾

@using (Html.BeginForm()) { 

<input type="submit" value="b1" /> 

<input type="submit" value="b2" /> 
<input type="submit" value="b3" /> 

} 

家庭控制器

public ActionResult Button1Click() 
     { 

      return View(); 
     } 

public ActionResult Button3Click() 
     { 

      return View(); 
     } 

public ActionResult Button2Click() 
     { 

      return View(); 
     } 

當點擊每個按鈕我如何編寫代碼來執行正確的控制器方法?

+0

[你如何處理ASP.NET MVC框架中的多個提交按鈕?](http://stackoverflow.com/questions/442704/how-do-you-handle-multiple-submit-buttons-in -asp-net-mvc-framework) – tpeczek

回答

3

如果你要發送,那麼你可以把每個按鈕在一個單獨的form

@using (Html.BeginForm("Button1Click","Index")) { 
    <input type="submit" value="b1" /> 
} 
@using (Html.BeginForm("Button2Click","Index")) { 
    <input type="submit" value="b2" /> 
} 
@using (Html.BeginForm("Button3Click","Index")) { 
    <input type="submit" value="b3" /> 
} 

如果沒有數據後,如在你的方法,你仍然希望擁有的所有按鈕相同的form然後你可以做一個ajax帖子(這雖然沒有意義,但嘿,我基於它在你的問題給你的代碼),雖然你可能想要改變你的按鈕從提交到按鈕( input type="button")。

$("#b1").click(function(){ 
    $.post('/index/button1click', function() { 
    }); 
}); 
$("#b2").click(function(){ 
    $.post('/index/button2click', function() { 
    }); 
}); 
$("#b3").click(function(){ 
    $.post('/index/button3click', function() { 
    }); 
}); 

如果你想要做一個GET,而不是一個職位,然後只是.get取代.post

+0

當我點擊'button3'時,頁面被重定向到'../ index/button3click'。而且我沒有顯示視圖,所以最終抱怨沒有找到該頁面。我希望它自己保留在索引頁面中。我怎樣才能做到這一點 ? –

+0

你打算如何處理按鈕,它們將用於POST或GET請求? –

+0

這是一個GET請求。我希望它保留在索引頁面或重定向到另一個視圖。我試過'RedirectTo(「Index」,「Home」)'但它不起作用 –

3

在MVC中,您需要刪除(Asp.Net)將按鈕點擊鏈接到操作的想法。 ASP.Net是event driven MVC使用經典的HTTP REST方法。

所以按鈕不是動作,按鈕submit動作。 已提交的操作由您的form控制。因此,您使用HTTP postPOST的數據發送到控制器。

現在還不清楚你想在這裏實現什麼。您似乎將從每個action返回不同的view。因此,使用REST的想法,你應該是一個GET ing而不是一個POST ing(你得到HTML)。所以,最簡單的想法是把你的inputsubmit)爲錨標籤,即HTTP GET:

@Html.ActionLink("Button1Click") 

+2

+1堅持MVC模式。 – Saanch

0

一個簡單的方法,以相同的形式內執行不同的按鈕不同的動作是他們的名字區分按鈕點擊:

示例代碼:

查看:

@using (Html.BeginForm("MyMethod","Controller")) 
{ 

<input type="submit" value="b1" name="b1" /> 

<input type="submit" value="b2" name="b2" /> 
<input type="submit" value="b3" name="b3" /> 

} 

控制器:

[HttpPost] 
    public ActionResult MyMethod(string b1, string b2, string b3) 
    { 
     if (b1 != null) 
     { 
      return Button1Click(); 
     } 
     else if (b2 != null) 
     { 
      return Button2Click(); 
     } 
     else 
     { 
      return Button3Click(); 
     } 
    } 

    public ActionResult Button1Click() 
    { 

     return RedirectToAction("Index"); 
    } 

    public ActionResult Button3Click() 
    { 

     return RedirectToAction("Index"); 
    } 

    public ActionResult Button2Click() 
    { 

     return RedirectToAction("Index"); 
    } 
0

MVC不一樣,你有一個ButtonClick事件Web表單工作。 是否要將任何值發佈到控制器?

如果沒有,您可以使用可以像按鈕樣式的鏈接。使用buildin Html擴展。

//For links 
@Html.ActionLink("Button1Text","Button1Click") 
@Html.ActionLink("Button2Text","Button2Click") 
@Html.ActionLink("Button3Text","Button3Click") 

//If you need more styling options 
<a href="@Html.Action("Button1Click")" class="btn">Button1</a> 
<a href="@Html.Action("Button2Click")" class="btn">Button2</a> 
<a href="@Html.Action("Button2Click")" class="btn">Button3</a> 

這樣你就不需要任何javascript或多種形式在你的視圖中。您必須在CSS文件中添加一些樣式。

+2

你不能只是'@ Html.ActionLink(「Button1Text」,「Button1Click」,new {@ class =「btn」})'? – Liam

+0

@Liam的確,如果你只是想添加一個css類,你可以使用這個符號! –

+0

技術上沒有,您可以使用該方法添加任何HTML屬性。 – Liam

相關問題