mvc form method ='post',带有两个提交按钮

时间:2014-04-13 22:07:45

标签: jquery asp.net-mvc form-submit submit-button

我在这里查看了几个帖子以寻求解决方案。我会尝试一个新问题。

我的表格:

<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错误。

基本上,我需要一种方法来了解用户点击了保存按钮,而不是更新按钮。

感谢任何建议!

3 个答案:

答案 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的输入。