【问题标题】:Send Jquery UI Dialog value to Url.Action将 Jquery UI Dialog 值发送到 Url.Action
【发布时间】:2018-03-12 02:14:05
【问题描述】:

不确定如何将布尔值传递给我的(工作)C# 方法 DeleteTestuser。我已经用谷歌搜索过了,但里程因各种陷阱而异,即旧信息、错误语法。

如果用户确认操作,我需要返回一个布尔值,而不是将确认传递为 false。谢谢...

index.cshtml

<a href="@Url.Action("DeleteTestUser", "Home",
    new {id = testUser.TestUserId, confirm = false})" 
id="confirm-delete">

_layout.cshtml

    <script type="text/javascript">
    $(function () {

        $('#dialog-modal').dialog(
            {
                title: 'Test User',
                draggable: false,
                resizeable: false,
                closeOnEscape: true,
                modal: true,
                autoOpen: false,
                buttons: {
                    'Yes': function () {
                        $(this).dialog('close');
                        confirmResult(true);

                    },
                    'No': function () {
                        $(this).dialog('close');
                        confirmResult(false);
                    }
                }
            });

        $('#confirm-delete').click(function () {
            $('#dialog-modal').dialog("open");
        });

        function confirmResult(result) { return result }
    });

</script>

【问题讨论】:

  • 究竟是什么不工作?
  • @Twisty 按原样,严格来说没有错,但我需要将对话框中的布尔值传递给 DeleteTestUser,但我不知道该怎么做。
  • 您需要使用 javascript 更改 href 值。但是你也可以在链接中使用href="#",然后你的脚本使用location.href = ".."进行重定向
  • 首先,您的button 格式不正确。 buttons: [{ text: "Yes", click: function(){} }, { text: "No", click: function(){} }]

标签: jquery-ui razor asp.net-mvc-5


【解决方案1】:

基本上,您正在使用 jQuery UI 对话框重新创建自己的 confirm()。我这样做了,这是一个类似的案例:confirm form submit with jquery UI

将此应用到您的场景中,您会得到类似的结果:

$(function() {
  function ui_confirm(message, callback) {
    var dfd = $.Deferred();
    var dialog = $("<div>", {
        id: "confirm"
      })
      .html(message)
      .appendTo($("body"))
      .data("selection", false)
      .dialog({
        autoOpen: false,
        resizable: false,
        title: 'Confirm',
        zIndex: 99999999,
        modal: true,
        buttons: [{
          text: "Yes",
          click: function() {
            $(this).dialog("close");
            dfd.resolve(true);
            if ($.isFunction(callback)) {
              callback.apply();
            }
          }
        }, {
          text: "No",
          click: function() {
            $(this).dialog("close");
            dfd.resolve(false);
          }
        }],
        close: function(event, ui) {
          $('#confirm').remove();
        }
      });
    dialog.dialog("open");
    return dfd.promise();
  }
  
  function deleteUser(id){
    // Code you will execute to delete a user or POST back.
  }
  
  $(".button").button();
  $('.del').click(function(e) {
    e.preventDefault();

    // your code

    $.when(ui_confirm("Are you sure?")).done(function(val) {
      if (val) {
        console.log("Delete User Confirmed.");
        deleteUser($(this).attr("id"));
      } else {
        console.log("Do not delete user.");
      }
    });
  });
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
John Smith <a href="#del-user" class="del button" id="user-0001">Delete</a>

您可能只需执行特定的回调就可以摆脱困境。这取决于你。然后,此代码还可用于传递另一个函数或与 prompt() 类似的对话框一起使用。

更新

见:Using Url.Action in javascript

例如:

function deleteTestUser(uid, conf){
  var url = '@Url.Action("DeleteTestUser", "Home", new {id=' + uid + ', confirm=' + conf + '})';
  $.get(url, function(data){
    console.log("User " + uid + " Deleted.");
  });
}

如果可能,我会使用 POST。

function deleteTestUser(uid, conf){
  $.post('@Url.Action("DeleteTestUser", "Home")', { id: uid, confirm: conf }, function(data){
    console.log("User " + uid + " Deleted.");
  });
}

【讨论】:

  • 谢谢。我将在今天晚些时候更深入地研究这一点,但我可能不清楚。我的基本需求是将确认对话框选择(真或假)最终通过剃刀传递给 C# 方法。我不确定您提供的内容是否准确。所以 js --> razor -- C#
  • @Steve 我没有提供,因为你没有说明你想怎么做。我怀疑回邮是最好的。这类似于将 AJAX 发布到后端 Razor 或 C# 脚本。
  • @Steve 稍微更新了我的答案。看起来你可以使用 GET。我不使用 Razor,也不会用 C# 做很多事情,所以必须查一下。
  • 谢谢你。我会尝试一下。我也意识到我可能只是以错误的方式看待这个问题。如果用户取消删除操作,我可能只需要重定向,而不是尝试传递布尔值。
  • 您的答案可能确实有效,但实际上我问错了问题。我需要取消或发布到 Url.Action。我不需要传递布尔值。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
相关资源
最近更新 更多