繁体   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