1

我创建了一个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

4 回答 4

3

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

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

现在还不清楚你想在这里实现什么。您似乎view从 each 返回不同的 s action。因此,使用 REST 理念,您应该是一个GETing 而不是一个POSTing(您正在获取 HTML)。所以最简单的想法是把你的input( submit) 变成 Anchor 标签,即一个 HTTP GET:

@Html.ActionLink("Button1Click")

等等

于 2013-04-17T09:37:10.590 回答
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.

于 2013-04-17T09:34:57.230 回答
0

MVC 不像 Web 表单那样工作,其中您有一个 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 文件中添加一些样式。

于 2013-04-17T09:43:27.870 回答
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");
    }
于 2013-04-17T09:39:53.833 回答