1

我有一个标准的 ASP MVC 4 表单,用户可以在其中编辑一些详细信息并单击“批准”或“拒绝”,这会导致回发。

当控制器收到回传中的模型时,我怎么知道点击了哪个按钮?

我正在寻找一种标准的方法来做到这一点,所以我不会迷惑下一个从事该项目的开发人员。

编辑我正在使用立柱,

4

4 回答 4

6

为每个按钮命名(每个按钮相同)和值(每个按钮唯一)。

 <button type="submit" name="button" value="approve">Approve</button>
 <button type="submit" name="button" value="decline">Decline</button>

然后将一个字符串参数添加到您的 post 方法,称为您分配给按钮的任何名称。

 [HttpPost]
    public ActionResult ProcessForm (Model model, string button)
    {
        //the parameter 'button' will contain the value of the button clicked - either 'approve' or 'decline'
    }
于 2012-11-30T13:12:01.617 回答
3

在每种 html 格式中都遇到了一个棘手的问题。它可以归结为您需要回发多少数据......如果您只需要识别模型并且实际上不需要表单数据,那么可以使用发布到不同控制器的两种不同表单轻松实现:对于下一个开发人员来说非常透明和清晰:

<div class="container">

<form method="POST" action="/approve/123">
    <input type="submit">
</form>

<form method="POST" action="/decline/123">
    <input type="submit">
</form>

<div>

或者,如果您确实需要回发表单数据,我会将客户端 onclick 事件附加到相应更新表单操作的每个按钮。然而,对于下一个开发人员来说,这还不是很清楚......

<div class="container">

<form method="POST" action="/">
    <input type="submit" value="Accept" id="btn-accept">
        <input type="submit" value="Decline" id="btn-decline">
</form>

</div>

$(function(){
$("#btn-accept").click(funcion(e)({
    e.preventDefault();
    $("form").attr("action", "/approve");
    $("form").submit();
}));
$("#btn-decline").click(funcion(e)({
    e.preventDefault();
    $("form").attr("action", "/decline");
    $("form").submit();
}));
});
于 2012-11-30T11:51:42.470 回答
2

我认为最简单的是,
将拒绝按钮的输入类型从更改submitbuttonthis 不会回发到控制器,然后您可以使用几行代码将用户重定向到其他页面

于 2012-11-30T11:45:45.617 回答
1

您将要为“批准”或“拒绝”执行两个单独的“操作”,对吗?

我会在你的控制器中有一个批准动作,在你的控制器中有一个拒绝动作,这样他们就可以发布到他们自己的动作,而不是试图在一个控制器动作中处理这两个业务流程。

这将使每个动作的责任清晰明了。

于 2012-11-30T11:41:47.297 回答