我有一个标准的 ASP MVC 4 表单,用户可以在其中编辑一些详细信息并单击“批准”或“拒绝”,这会导致回发。
当控制器收到回传中的模型时,我怎么知道点击了哪个按钮?
我正在寻找一种标准的方法来做到这一点,所以我不会迷惑下一个从事该项目的开发人员。
编辑我正在使用立柱,
我有一个标准的 ASP MVC 4 表单,用户可以在其中编辑一些详细信息并单击“批准”或“拒绝”,这会导致回发。
当控制器收到回传中的模型时,我怎么知道点击了哪个按钮?
我正在寻找一种标准的方法来做到这一点,所以我不会迷惑下一个从事该项目的开发人员。
编辑我正在使用立柱,
为每个按钮命名(每个按钮相同)和值(每个按钮唯一)。
<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'
}
在每种 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();
}));
});
我认为最简单的是,
将拒绝按钮的输入类型从更改submit
为button
this 不会回发到控制器,然后您可以使用几行代码将用户重定向到其他页面
您将要为“批准”或“拒绝”执行两个单独的“操作”,对吗?
我会在你的控制器中有一个批准动作,在你的控制器中有一个拒绝动作,这样他们就可以发布到他们自己的动作,而不是试图在一个控制器动作中处理这两个业务流程。
这将使每个动作的责任清晰明了。