[英]How to have two methods in API Controller with same name but different arguments?
[英]How to execute 3 different controller methods from the same view
我創建了一個C# ASP.NET MVC
應用程序。 在Index
視圖中,我添加了3個按鈕,當單擊每個按鈕時,我想從Index
控制器執行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();
}
單擊每個按鈕后,如何編寫代碼以執行正確的控制器方法?
如果要發布,則可以將每個按鈕以單獨的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而不是發布,則只需將.post
替換為.get
。
在MVC中,您需要刪除(Asp.Net)將按鈕單擊鏈接到動作的想法。 ASP.Net是事件驅動的, MVC使用經典的HTTP REST方法。
因此,按鈕不是動作,按鈕會submit
動作。 提交的操作由您的form
控制。 因此,您可以使用HTTP post將表單POST
的數據發送到控制器。
現在不清楚您要在這里實現什么。 您似乎從每個action
返回不同的view
。 因此,使用REST想法,您應該是GET
而不是POST
(您獲取HTML)。 因此,最簡單的想法是將您的input
( submit
)轉換為Anchor標記,即HTTP GET:
@Html.ActionLink("Button1Click")
等等
對同一表單中的不同按鈕執行不同操作的一種簡便方法是按按鈕的名稱來區分按鈕單擊:
示例代碼是:
視圖:
@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");
}
MVC不能像WebForms那樣具有ButtonClick事件。 是否要向控制器發布任何值?
如果沒有,則可以使用可以像按鈕一樣設置樣式的鏈接。 使用內置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文件中添加一些樣式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.