【问题标题】:From View post back Id, to controller function?从 View post back Id 到控制器功能?
【发布时间】:2014-03-29 21:07:06
【问题描述】:

使用MVC,如果用户点击垃圾桶图标,它会从视图中POSTmobileDevice.Id调用MobileDeviceControllerConfirmDeactivate动作

//VIEW
     <a onclick="Deactivate(@mobileDevice.Id);" class="show-pointer"><i class="icon-trash"></i>Click here</a>

       <script>
      function Deactivate(mobileDeviceId) {
                alert(mobileDeviceId);

                 $.ajax({
                    url: 'MobileDevice/ConfirmDeactivate',
                    type: 'POST',
                    contentType: 'application/json;',
                    data: JSON.stringify({ targetid: mobileDeviceId })});

            }
             </script>

//controller
     [HttpPost]
            public ActionResult ConfirmDeactivate(int targetid)
            {
    //update target
    }

我是否缺少 ajax 引用或其他内容?

或者有人有其他想法吗?关于这个。

更新 按照我尝试过的答案:

 //VIEW
  <a href="javascript:void(0);" id="post-btn" data-device-id="@mobileDevice.Id" class="show-pointer"><i class="icon-trash">/i>Click here</a>

      <script>
         $('#post-btn').on('click', function() {
          alert(targetid);
         $.ajax({
            url: '@Url.Action("ConfirmDeactivate", "MobileDevice")''~/MobileDevice/ConfirmDeactivate', 
            type: 'POST',
            data: { targetid: $(this).data('device-id') }
         });
         })
  </script>

//controller
     [HttpPost]
            public ActionResult ConfirmDeactivate(int targetid)
            {
    //update target
    }

但这不起作用。尝试添加警报,但没有显示

$('#post-btn').on('click', function() {
          alert(targetid);

请指教

【问题讨论】:

  • 控制台说什么?
  • 是的 JQuery 已定义,当我按下 'bin' 时没有任何反应
  • 使用浏览器的调试工具检查您的网络流量。验证它是否正在发送请求,并且它会发送到您认为的位置。您应该能够使用它来追踪出了什么问题。如果它实际上到达了控制器方法,那么你应该能够在那里进一步调试。
  • 我猜你应该使用'~/MobileDevice/ConfirmDeactivate'。
  • 按照 Maess 的指示进行操作,并将其放入 $(document).ready() 函数中,然后查看您的警报是否触发。

标签: javascript html asp.net ajax asp.net-mvc-3


【解决方案1】:

尝试像这样更改您的代码:

<a href="javascript:void(0);" id="post-btn" data-device-id="@mobileDevice.Id" class="show-pointer"><i class="icon-trash"></i>Click here</a>

$('#post-btn').on('click', function() {
             $.ajax({
                url: '@Url.Action("ConfirmDeactivate", "MobileDevice")', //I believe you should use this instead of 'MobileDevice/ConfirmDeactivate'
                type: 'POST',
                data: { targetid: $(this).data('device-id') }
             });
})

当然,如果你定义了 jQuery,它应该可以工作。

【讨论】:

  • 如果您要这样做,您需要一些事件来实际调用添加事件处理程序的代码,例如文档就绪事件。
  • 我用过这个,当我点击“bin”图标时没有任何反应?是的 JQuery 已定义
  • @John,抱歉,缺少 HREF。请查看编辑后的答案
  • 其实他是对的,应该在document.ready()之类的东西中,否则当你尝试绑定时你会冒着你的对象不存在的风险。它“可能”会起作用,但正确的做法是 Maess 指出的。请参阅文档:api.jquery.com/on
  • @Mike C.,很抱歉,但如果您更仔细地查看此 api,您会看到一个示例,其中 .on() 使用时没有任何 document.ready()
猜你喜欢
  • 1970-01-01
  • 2016-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-11
  • 2014-07-12
  • 1970-01-01
  • 2019-01-09
相关资源
最近更新 更多