簡體   English   中英

如何從同一視圖執行3種不同的控制器方法

[英]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)。 因此,最簡單的想法是將您的inputsubmit )轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM