Jquery 点击按钮后将变量数据传递给控制器?有什么好办法吗?

Jquery 点击按钮后将变量数据传递给控制器?有什么好办法吗?,jquery,asp.net-mvc,datatable,Jquery,Asp.net Mvc,Datatable,我面临一个棘手的问题。 我在谷歌上用了所有可能的方法,但没有运气。如果我遗漏了什么,现在可以帮我吗 我在下面的代码中做了一些注释。简而言之,我只需要一种方法,将存储在变量“delreason”中的提示文本传递给单击按钮时的控制器删除方法,这肯定是转到控制器删除方法 我的代码:- delreason = ''; $(document).ready(function () { var reason = $("#DropDown_Select").val()

我面临一个棘手的问题。 我在谷歌上用了所有可能的方法,但没有运气。如果我遗漏了什么,现在可以帮我吗

我在下面的代码中做了一些注释。简而言之,我只需要一种方法,将存储在变量“delreason”中的提示文本传递给单击按钮时的控制器删除方法,这肯定是转到控制器删除方法

我的代码:-

 delreason = '';
    $(document).ready(function () {
        var reason = $("#DropDown_Select").val()
        var oTable;


        $('#btnDeleteRow').click(function () {
            delreason = prompt("r u serious");   
//When delete button is clicked i need to first gather the reason and pass to controller delete method i.e I ADOPTED QUERY STRING WAY as BELOW YOU CAN FIND sDeleteURL used like  query string so i can pass my Row-id asusual and additinally i can pass my prompt text entered .


            $(this).prop('disabled', true);

        });

            $('#myDataTable').dataTable().fnDestroy();

            oTable = $('#myDataTable').dataTable({
                "bProcessing": true,
                "bServerSide": true,
                "bAutoWidth": true,
                "bDestroy": true,
                "sAjaxSource": "AjaxHandler",
                "fnServerData": function (sSource, aoData, fnCallback) {

                    $('#DropDown_Select').change(function () {
                        alert($(this).val());
                        reason = $(this).val()
                        debugger;
                        //oTable.fnFilter($(this).val());
                        $.ajax({
                            "type": "GET",
                            "dataType": 'json',
                            "contentType": "application/json; charset=utf-8",
                            "url": sSource + "/" + reason,
                            "data": aoData,
                            "success": function (data) {

                                fnCallback(data);
                            }
                        });


                    });
                    $.ajax({
                        "type": "GET",
                        "dataType": 'json',
                        "contentType": "application/json; charset=utf-8",
                        "url": sSource + "/" + reason,
                        "data": aoData,
                        "success": function (data) {

                            fnCallback(data);
                        }
                    });
                },
                "bJQueryUI": true,
                "sPaginationType": "full_numbers",
                "aoColumns": [
                          {
                              "sName": "Lead_Id"
                                            ,
                              "bVisible": false,
                              "bSearchable": false,
                              "bSortable": false

                          },
                          {
                              "sName": "LeadName"
                              ,
                              "fnRender": function (oObj) {
                                  return '<a href=\"LeadIndividualDetail/' + oObj.aData[0] + '\">' + oObj.aData[1] + '</a>';
                              }
                          },
                           { "sName": "ContactName", "sClass": "hidden-xs" },
                           { "sName": "CompanyName" },
                           { "sName": "Product" }

                ]

            });


                oTable.makeEditable({

                    "sDeleteURL": "/Lead/DeleteData/?start=" + delreason, // query string way via URL . 
                    sDeleteHttpMethod: "GET",
                    "event": "click",
                    "style": "inherit",
                    "width": ($('myDataTable').width() - 40) + "px",
                    "height": ($('myDataTable').height() + 20) + "px",
                    "aoColumns":
                    [
                        null,
                        null,
                        null,
                        null
                    ]
                });

      $("#myDataTable tbody tr").on('click', function (event) {
          debugger;
          alert("now");
          $("#myDataTable tbody tr").removeClass('row_selected');
          $(this).addClass('row_selected');
      });

    });
我错过什么了吗?有更好的选择吗

我找到了一些解决方法,但遗憾的是,它重定向到了另一个问题:如果我想在控制器上获取提示文本,我想重新加载我的oTable.makeEditable({CONTENT..好吧,但尝试这个简单的方法,在删除第一行之后,我无法进一步选择和删除任何行

任何使用查询字符串或watever传递提示文本的方法,我的控制器Deletemethod在单击时都会很感激

编辑1:删除方法的我的控制器代码:

 public string DeleteData(int id )
        {
            var value = Request.QueryString["start"];
关于

如果您将控制器方法更改为如下所示,我认为它将“按原样”工作:

[HttpPost]
public string DeleteData(int id)
...
    oTable.makeEditable({
         "sDeleteURL": "/Lead/DeleteData/?" + $.param([{name:'start', value:delreason}]),
    sDeleteHttpMethod: "POST",
              "event": "click",
...
并将javascript代码更改为如下所示:

[HttpPost]
public string DeleteData(int id)
...
    oTable.makeEditable({
         "sDeleteURL": "/Lead/DeleteData/?" + $.param([{name:'start', value:delreason}]),
    sDeleteHttpMethod: "POST",
              "event": "click",
...
您希望使用$.param()的原因是,仅添加到sDeleteURL不会每次都创建有效的请求,并且您将丢失数据或遇到其他问题,例如,如果用户输入“Client called&said go away”

另一种方法是,网格应该允许您通过使用beforeSend提前设置ajax调用,将原因注入ajax操作中。请参阅和

编辑:

查看当前版本的代码后,我看到的唯一真正的问题是click事件位于错误的位置。每次翻阅数据时,它都会添加另一个click事件侦听器,导致DeleteData ajax调用被多次执行。解决此问题的最简单方法是先分离现有侦听器苏志伟:

if (delete_bound) { $('#btnDeleteRow').die('click'); }
delete_bound = true;
$('#btnDeleteRow').live('click', function (){ 

但是,您确实应该对javascript进行结构化,以便它在表的构造中不包含事件。您还运行了较旧版本的jQuery,如果可能的话,您应该对其进行更新,以便您可以使用更多的工具,如
on()
off()
方法。

请为您的控制器发布代码(至少是方法签名)。很可能您没有将其正确设置为在删除过程中接收
reason
参数。请尝试使用
POST
方法而不是
GET
方法,尤其是在为
sDeleteURL
提供查询字符串的情况下。添加的代码:)请查看并建议我。HttpPost在我的情况下不起作用。当我尝试使我的控制器删除方法参数化时,通常我在第二个参数处得到null,我也知道为什么会这样。只是因为我的oTable.makeEditable没有得到刷新。我会尝试让你知道,伙计。我完全放弃了使用edita的计划ble插件和现在尝试使用ajax调用仍然存在问题,但这一次是兼容性问题。我在这里发布您可以分享您的想法:…RegardsUff:(同样的事情。我尝试了与代码相同的方式。但遇到了与我相同的情况。delreason值没有进入“sDeleteURL”:。我知道原因,即在oTable.makeEditable中({delreason没有得到更新可能是因为在单击按钮时代码块没有重新加载。这与我在以前的代码中遇到的问题相同&现在。编辑:此外,在控制器中保留POST方法时,甚至没有触发。替换为GET-It-Fireing,但delreason仍然是空的,就像您有一些其他未触发的东西一样“您的控件和服务器端按钮单击未显示在此处。是否有任何方式可以共享您的项目?是的,我可以传递我的整个项目。您可以共享任何类型的mailid吗?所述代码是我在解决方案中使用的excat代码,只需稍加修改..如前所述,您可以在此处找到我的新代码。”链接: