如何从同一视图执行3种不同的控制器方法

时间:2013-04-17 09:29:00

标签: c# asp.net-mvc asp.net-mvc-4

我创建了一个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();
        }

单击每个按钮时,如何编写代码以执行正确的控制器方法?

4 个答案:

答案 0 :(得分: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而非帖子,那么只需将.post替换为.get

答案 1 :(得分:3)

在MVC中,您需要删除(Asp.Net)将按钮点击链接到操作的想法。 ASP.Net是event driven MVC使用经典的HTTP REST方法。

因此按钮不是动作,按钮submit动作。 提交的操作由您的form控制。因此,使用HTTP post将表单POST的数据发送到控制器。

现在还不清楚你想在这里实现什么。您似乎从每个view返回了不同的action。因此,使用REST概念,您应该是GET而不是POST(获取HTML)。因此,最简单的想法是将inputsubmit)转换为Anchor标记,即HTTP GET:

@Html.ActionLink("Button1Click")

答案 2 :(得分: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");
    }

答案 3 :(得分:0)

MVC无法像您拥有ButtonClick事件的Webforms一样工作。 您想将任何值发布到控制器吗?

如果没有,您可以使用可以像按钮一样设置样式的链接。使用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文件中添加一些样式。