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

我的表格:

<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>
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top