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

本文关键字:控制器 方法 3个 执行 同一个 视图 | 更新日期: 2023-09-27 18:09:31

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

当每个按钮被点击,我怎么写代码来执行正确的控制器方法?

如何从同一个视图执行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,那么只需将.post替换为.get

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

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

现在我不清楚你想要达到什么目的。您似乎从每个action返回不同的view s。所以使用REST的想法,你应该是一个GET ing而不是一个POST ing(你得到的HTML)。所以最简单的想法是把你的input (submit)变成锚标记,即HTTP GET:

@Html.ActionLink("Button1Click")

等。

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文件中添加一些样式

在同一表单中的不同按钮上执行不同操作的一种简单方法是通过名称来区分按钮单击:

示例代码为:

视图:

@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");
    }