我有一个标准的ASP MVC 4表单,用户可以编辑一些详细信息,然后单击“批准”或“拒绝”,这会导致回发。
当控制器在回发中收到模型时,我如何知道点击了哪个按钮?
我正在寻找一种标准的方法来做到这一点,所以我不会让下一个从事这个项目的开发人员神秘化。
编辑我正在使用立柱,
答案 0 :(得分: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'
}
答案 1 :(得分: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();
}));
});
答案 2 :(得分:2)
我认为最简单的是
将拒绝按钮的输入类型从submit
更改为button
这不会回发给控制器然后您可以用几行代码将用户重定向到其他页面
答案 3 :(得分:1)
你会想要为“批准”或“拒绝”权利做两个单独的“行动”吗?
我的控制器中会有一个批准操作,控制器中会有一个拒绝操作,因此他们可以发布自己的操作,而不是尝试在一个控制器操作中处理这两个业务流程。
这将使每个动作的责任变得清晰明确。