mvc表单方法='post',有两个提交按钮
-
21-12-2019 - |
题
我在这里查看了几个帖子以获得解决方案。我会尝试一个新的问题。
我的表格:
<form method="post" action="@Url.Action("Manage")" data-cs-ajax="true" data-cs-target="#catalogList" >
它有一个自动完成字段和分页,非常类似于Scott Allen的OdeToFood示例。
有 :
<input type="submit" value="Update" class="btn btn-default" />
它更新了一些过滤的项目,从选择-所有伟大的工作-也:
<input type="submit" name="btnSave" id="btnSave" value="Save" class="btn btn-default" />
他们都成功地击中了:
//POST: /WebCatalog/Manage/5
[HttpPost, ActionName("Manage")]
[ValidateAntiForgeryToken]
public ActionResult Manage([Bind(Include = "Id,CatalogId,CatalogColourId,CatalogSizeId,CatalogCategoryId,CatelogSupplierId,StartDate,EndDate,Active,isSubmitted")] WebCatalogViewModel model, string searchTerm = null, int page = 1)
{ ...
他们确实因为javascript而击中了控制器动作:
$(function () {
var ajaxFormSubmit = function () {
var $form = $(this);
var options = {
url: $form.attr("action"),
type: $form.attr("method"),
data: $form.serialize()
};
$.ajax(options).done(function (data) {
var $target = $($form.attr("data-cs-target"));
var $newHtml = $(data);
$target.replaceWith($newHtml);
var options = {};
$newHtml.effect("highlight", options, 500, doneEffect);
});
return false;
};
就现在。..
我想在模型中设置一个字段,让控制器知道第二个btnSave按钮是clicked...to 当然,保存记录。...
苏。..
$(function () {
$("#btnSave").click(function () {
$("isSubmitted").val("1");
return true;
});
});
那火:在ajaxFormSubmit中通过ajax提交页面之前,$(#btnSave")的按钮jQuery代码确实成功触发。
但是,在控制器操作中,isSubmitted始终为0。
我试过了 :
$("isSubmitted").val(1);
我已经尝试了形式为method='get',仍然没有post-虽然,我可能会尝试然后在btnSave.click js函数中用javascript更改方法-不知道如何做到这一点。..如果我无法在表单控件中保存值,那么为什么我可以更改表单方法??
我试过一个$Ajax。ActionLink-但总是得到500IIS错误。
基本上,我需要一种方法来知道用户点击了保存按钮,而不是更新按钮。
任何建议表示赞赏!
解决方案
@robert achmann,这是我的答案
似乎选择$(“issumuited”)缺少,例如:$(“#sensubmited”)用于ID发行ID的输入。
其他提示
您不需要隐藏值来告诉控制器单击了哪个按钮。你需要做的是命名2个按钮如下
<input type="submit" name="btnAction" value="Update" class="btn btn-default" />
<input type="submit" name="btnAction" value="Save" id="btnSave" class="btn btn-default" />
正如您所看到的,它们具有相同的名称但不同的值(更新vs保存)。
在控制器中,添加另一个名为 btnAction
, ,这是按钮的名称,到动作。
[HttpPost, ActionName("Manage")]
[ValidateAntiForgeryToken]
public ActionResult Manage(string btnAction, [Bind(Include = "Id,CatalogId,CatalogColourId,CatalogSizeId,CatalogCategoryId,CatelogSupplierId,StartDate,EndDate,Active,isSubmitted")] WebCatalogViewModel model, string searchTerm = null, int page = 1)
{
if(btnAction.ToLower() == "save")
{
// The save button was clicked
}
else if(btnAction.ToLower() == "update")
{
// The update button was clicked
}
else
{
// default ...
}
}
基本上,参数 btnAction
将获取触发表单获取post的提交按钮的值。
希望这有所帮助。
您可以在表单中的隐藏字段存储单击的字段的值(使用jQuery事件处理程序控制此),为此,您可以使您的按钮类型=“按钮”而不是类型=“提交”(要从jQuery代码提交表单),或者您可以使用EventPreventDefault。
嗯,这是一个可以帮助您的代码样本: <!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js">
</script>
<script>
$(document).ready(function(){
$("#bt1").click(function(){
alert(' Save button');
$("#operation").val('save');
$("#frm").submit();
});
$("#bt2").click(function(){
alert(' Update button');
$("#operation").val('update');
$("#frm").submit();
});
});
</script>
</head>
<body>
<form id="frm">
<div id="div1"><h2> Form buttons - What of then was clicked? </h2></div>
<button id="bt1"> Save button </button>
<button id="bt2"> Update button </button>
<input type="hidden" id="operation" name="operation" value=""/>
</form>
</body>
</html>
.