我在这里查看了几个帖子以寻求解决方案。我会尝试一个新问题。
我的表格:
<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按钮被点击...当然要保存记录....
...洙
$(function () {
$("#btnSave").click(function () {
$("isSubmitted").val("1");
return true;
});
});
然后触发:在通过ajaxFormSubmit中的ajax提交页面之前,$(#btnSave“)的按钮jQuery代码成功触发。
但是,在控制器操作中,isSubmitted始终为0.
我试过了:
$("isSubmitted").val(1);
我已经尝试过form ='get'并且仍然没有帖子 - 但是,我可能会尝试在btnSave.click js函数中使用javascript更改方法 - 不知道该怎么做...如果我无法在表单控件中保存值,那么为什么我能够更改表单方法??
我尝试过$ Ajax.ActionLink - 但总是得到500 IIS错误。
基本上,我需要一种方法来了解用户点击了保存按钮,而不是更新按钮。
感谢任何建议!
答案 0 :(得分:1)
您不需要隐藏值来告诉控制器单击了哪个按钮。您需要做的是将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" />
如您所见,它们具有相同的名称但值不同(更新与保存)。
在控制器中,为操作添加另一个名为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
将获取触发表单的提交按钮的值以获得发布。
希望得到这个帮助。
答案 1 :(得分:0)
您可以在表单中隐藏字段来存储单击字段的值(使用jquery事件处理程序控制它),为此您可以使按钮类型=“按钮”而不是type =“submit”(为了从您的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>
答案 2 :(得分:0)
@Robert Achmann,这是我的回答
似乎缺少$(“isSubmitted”)中的选择器,例如$(“#isSubmitted”)用于id为isSubmitted的输入。