【问题标题】:MVC Deleting record using Javascript pop up使用 Javascript 弹出 MVC 删除记录
【发布时间】:2012-01-25 15:17:06
【问题描述】:

我已完成创建、编辑 功能并尝试执行删除 功能,但默认情况下我的页面重定向到Delete.aspx 以确认删除。 当我尝试删除我的记录时,我希望执行以下步骤。目前我在 index.aspx 并希望留在同一页面上并从数据库中删除记录。

图片 1

图片 2

图 3

我不希望从 URL 中删除。 例如。 http://localhost:53402/Project/Delete/11,任何人都可以很容易地删除任何提供 id 的记录。

【问题讨论】:

  • 如果您在这里为我们发布至少一些代码会更好

标签: javascript asp.net-mvc model-view-controller popup


【解决方案1】:

为了使用 javascript 和弹出窗口执行删除,您需要: 1)在控制器中创建一个动作,如下所示:

[HttpPost]
public void DeleteItem(int id)

通过使用 [HttpPost] 注释装饰操作方法,您可以避免用户键入 URL /Home/Delete/1 的不良行为,因为只有 POST 会调用该操作。

2)如果你delete-item是一个item列表的一部分,你需要在View中绑定你的item一个id,使用自定义的HTML5属性,如下:

@for (int i = 0; i < Model.Items.Count; i++)
{                            
     <a href="#" class="delete-button" data-id="@Model.Items[i].Id">Delete</a>        
}

3) 以 jQuery 为例,将页面中的删除按钮绑定到单击时弹出窗口

$().ready(function () {
    $(".delete-button").click(null, DeleteItem);  //DeleteItem is the callback      
    return false;
});

我们需要指定一个回调来处理删除按钮的点击

4)使用例如 jQuery UI 对话框组件:

为您的弹出文本创建 HTML

<div id="dialog-confirm" style="display:none;" title="Confirm">
<p>
    <span class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></span>
    Are you sure you want to proceed?
</p>
</div> 

处理删除按钮单击并将对话框绑定到 html 文本,以便弹出窗口告诉用户您想要什么

function confirmDeleteVersion() {        
    var recordToDelete = $(this).attr("data-id"); // now we need the data-id to retrieve the identifier for the item to delete              
    $("#dialog-confirm").dialog({
        resizable: false,
        height: 200,
        modal: true,
        buttons: {
            "Delete": function () {         
                $(this).dialog("close");        
                $.post("/Home/Delete", { id : recordToDelete}, DeleteSuccessfull);
            },
            Cancel: function () {
                $(this).dialog("close");
            }
        }             
    });     
};

所以,我们得到了按钮的id

var recordToDelete = $(this).attr("data-id");

其中“this”是导致事件触发的 HTML 元素

下面一行实际上是我们要求Controller执行删除操作的地方,我们使用记录的id

$.post("/Home/Delete", { id : recordToDelete}, DeleteSuccessfull);

5) 因为jQuery post是异步的,所以我们需要一个回调来处理结果

function DeleteSuccessfull()
{
    //Do what you want...
};

就是这样...请记住,这只是一个示例,我使用的是 jQuery 对话框组件,而您可以使用不同的东西。

【讨论】:

【解决方案2】:

用 jquery 试试这个:

<script type="text/javascript">

    $(function () {
        $(".delete").live("click", function (e) {
            e.preventDefault();
            if (confirm("Are you sure you wish to delete this article?")) {
                $.post(this.href);
            }
        });
    });
</script>

<a href="/Project/Delete/11" class="delete">Delete</a>

【讨论】:

    【解决方案3】:

    如果您尝试实现真正的 MVC,正如您的问题所暗示的那样,事件事务将提交给控制器,例如 index.aspx - 该控制器将有一个事件指定您所在的当前视图页面,喜欢

    event="displayGui" 将包含视图文件“frmCreate.aspx”或“frmEdit.aspx”

    当视图文件“frmCreate.aspx”或“frmEdit.aspx”提交时,它会调用控制器中的另一个事件,如

    event="submitAndConfirm"

    事件 submitAndConfirm 将包含处理删除操作的说明,方法是包含一个名为 actDelete.aspx 的文件。当 actDelete.aspx 完成工作后,控制器将回调 event="displayGui"。

    这是一个概念性示例,需要特定于 aspx 的实现。

    【讨论】:

      【解决方案4】:

      你必须通过某种 id 来做,没有其他方法。

      如果您不希望用户操纵 URL,则需要某种登录/权限系统。

      【讨论】:

        【解决方案5】:

        我不希望从 URL 中删除。例如。 http://localhost:53402/Project/Delete/11,任何人都可以很容易地删除任何提供id的记录。

        如果你不想让用户猜测 id,请使用 Guid 而不是 int

        http://localhost:53402/Project/Delete/30D4AAF1-3CF1-4514-A025-2DDE1C770CD5

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-07-02
          • 2010-12-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多